문제

Linux 커널 코드가 Bool을 사용한다는 것을 알았지 만 Bool은 C ++ 유형이라고 생각했습니다. BOOL은 표준 C 확장 (예 : ISO C90) 또는 GCC 확장입니까?

도움이 되었습니까?

해결책

bool 현재 C -C99에는 존재하지만 C89/90에는 존재하지 않습니다.

C99에서 기본 유형이 실제로 호출됩니다 _Bool, 동안 bool 정의 된 표준 라이브러리 매크로입니다 stdbool.h (예상대로 해결됩니다 _Bool). 유형의 대상 _Bool 0 또는 1을 유지하십시오 true 그리고 false 또한 매크로입니다 stdbool.h.

BTW, 이것은 C 전 처리기가 해석 할 것임을 암시한다는 것을 의미합니다. #if true ~처럼 #if 0 ~하지 않는 한 stdbool.h 포함되어 있습니다. 한편, C ++ 사전 처리기는 기본적으로 인식해야합니다. true 언어 문자 그대로.

다른 팁

C99는 내장을 추가했습니다 _Bool 데이터 유형 (참조 위키 백과 자세한 내용은), 그리고 당신이 #include <stdbool.h>, 그것은 제공합니다 bool 매크로로 _Bool.

특히 Linux 커널에 대해 물었습니다. 그것은 존재를 가정합니다 _Bool 그리고 a bool typedef 자체 포함/linux/type.h.

아니요, 아니요 bool ISO C90에서.

다음은 표준 C (C99가 아님)의 키워드 목록입니다.

  • auto
  • break
  • case
  • char
  • const
  • continue
  • default
  • do
  • double
  • else
  • enum
  • extern
  • float
  • for
  • goto
  • if
  • int
  • long
  • register
  • return
  • short
  • signed
  • static
  • struct
  • switch
  • typedef
  • union
  • unsigned
  • void
  • volatile
  • while

여기에 논의하는 기사가 있습니다 다른 커널 및 표준에 사용 된 C와의 차이 : http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/index.html

C99가 있습니다 stdbool.h, 그러나 C90에서는 typedef 또는 enum으로 정의되어야합니다.

typedef int bool;
#define TRUE  1
#define FALSE 0

bool f = FALSE;
if (f) { ... }

대안으로 :

typedef enum { FALSE, TRUE } boolean;

boolean b = FALSE;
if (b) { ... }
/* Many years ago, when the earth was still cooling, we used this: */

typedef enum
{
    false = ( 1 == 0 ),
    true = ( ! false )
} bool;

/* It has always worked for me. */

_Bool C99의 키워드입니다. int 또는 double.

6.5.2

2 유형 _bool로 선언 된 객체는 값 0과 1을 저장하기에 충분히 큽니다.

C99는 Bool을 정의합니다. true 그리고 false 안에 stdbool.h.

stdbool.h C99에 도입되었습니다

stdbool.h 매크로를 참와 거짓을 정의하지만 1과 0으로 정의되었습니다.

그것이 이유입니다 sizeof(true) 4입니다.

그런 것도없고, 아마도 int를위한 매크로 일 것입니다.

C99 추가 a bool Semantics는 사용자 정의 및 컴파일러 확장 유형을 포함하여 C에 이전에 존재했던 거의 모든 정수 유형의 의미와 근본적으로 다른 유형과 일부 프로그램이 "Type-Def"를 가질 수있는 유형 bool.

예를 들어, 주어진 bool a = 0.1, b=2, c=255, d=256;, C99 bool 유형은 4 개의 객체를 모두 1로 설정합니다. C89 프로그램이 사용되는 경우 typedef unsigned char bool, 객체는 각각 0, 1, 255 및 0을받습니다. 사용 된 경우 char, 값은 위와 같을 수 있습니다 c -1 일 수 있습니다. 컴파일러 확장을 사용한 경우 bit 또는 __bit 유형, 결과는 0, 0, 1, 0 일 것입니다 (치료 bit 서명되지 않은 비트 필드 크기 1 또는 하나의 값 비트가있는 서명되지 않은 정수 유형에 해당하는 방식).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top