TRUE/FALSE
은 일반적으로 C에서 다음과 같이 정의됩니다. 이 정의는 컴파일러 구현에 따라 지원되는 C 표준의 일부입니까?C 표준의 TRUE/FALSE 부분입니까?
#define TRUE 1
#define FALSE 0
TRUE/FALSE
은 일반적으로 C에서 다음과 같이 정의됩니다. 이 정의는 컴파일러 구현에 따라 지원되는 C 표준의 일부입니까?C 표준의 TRUE/FALSE 부분입니까?
#define TRUE 1
#define FALSE 0
C99 및 C11은 _Bool
이라는 부울 의미론이있는 정수 유형을 정의하지만 실제로 true/false 키워드는 없습니다.
_Bool
유형 값 1과 0이 1로 변환되고, 0 인 비교하지 않는 값을 저장하기 만 할 수 있고, 비교 값은 0과 동일는 0.
로 변환되고 <stdbool.h>
을 포함하여 _Bool
유형은 다른 언어와 마찬가지로 bool
으로 쓰여질 수 있으며 true
및 false
C 전 처리기 매크로는 각각 1과 0으로 정의됩니다. 누군가가 때때로
#define TRUE 1
#define FALSE 0
typedef char BOOL; /* or #define BOOL char */
또는 C99 달리
typedef enum {False, True} BOOL;
같은 상수를 정의하는
그 전에, 그러나, 모두가 편리 다소이었다 적어도 하나의 결함 :
BOOL bClicked = False;
++bClicked, ++bClicked;
if (bClicked == False)
printf ("False\n");
else if (bClicked == True)
printf ("True\n");
else
printf ("Unknown: %d\n", bClicked);
정의 된 BOOL
유형이 아니기 때문에 "알 수 없음 : 2"가 인쇄됩니다. 진정한 Boolean 타입.
C99 버전 :
_Bool
은 그래서 1을 증가 저장 0과 1, 1
에서 0 같지 않은 비교 2, 결과를 얻을 수 있기 때문에 "참"인쇄됩니다
_Bool bClicked = 0;
++bClicked, ++bClicked;
if (bClicked == 0)
printf ("False\n");
else if (bClicked == 1)
printf ("True\n");
else
printf ("Unknown: %d\n", bClicked);
물론
, 대부분의 사람들은 실제로 참/거짓 상수에 대해 비교하기보다는 자신의 장점 언어를 사용
if (bClicked)
{
/* True if bClicked does not compare equal to 0 */
}
else
{
/* False */
}
을 그 때문에 B의 사실, 부울 유형 또는 참/거짓 상수에 대한 실제 필요는 없습니다. 그들은 의도의 표시를 위해 순전히 존재한다.
왠지 마지막에 같은 단순 비교 했어야 값을 반환에도 불구하고 사람이 일부 Windows API 함수 유형BOOL
의 값을 반환한다는 불평하지만,
TRUE
및
FALSE
이 유일하게 가능한 반환 값하지 않았다, 그래서 기억
가능한 모든 경우를 처리하기 위해서는 더 많은 비교가 필요했습니다. 당시의 실제 Boolean 유형이 있었다면, 그 함수는 무엇이든간에 int
유형의 값을 리턴했을 것입니다. BOOL
반환 유형은 두 개의 값만 반환 할 수 있음을 나타내지 만 세 번째 (오류) 반환 값이 있었기 때문에 해당 함수의 경우와 다를 수 있습니다.
http://en.wikipedia.org/wiki/De_facto_standard –
@MarkRansom : 거의 없습니다. 일부 (IMO, 스타일이 매우 나쁜) C 코드는 이와 같은 매크로를 사용합니다.그러나 그것은 보편적 인 것이 아닙니다. 그리고 그들이 기본적으로 정의한 유일한 곳은 모든 종류의 비표준 파일과 임의의 임베디드 시스템을위한 다양한 저품질 컴파일러 등을 가진 특정 Windows 컴파일러입니다 :-) –