programing

Bool은 토종 C형인가요?

yoursource 2022. 8. 9. 21:53
반응형

Bool은 토종 C형인가요?

Linux 커널 코드는 bool을 사용하고 있는 것을 알 수 있었습니다만, bool은 C++ 타입이라고 생각했습니다.Bool은 표준 C 확장(ISO C90 등) 또는 GCC 확장 중 어느 쪽입니까?

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

C99에서는 네이티브타입이 실제로 호출됩니다._Bool,하는 동안에bool는 에서 정의되어 있는 표준 라이브러리 매크로입니다.stdbool.h(이것은, 다음과 같이 해결됩니다)._Bool) 타입의 오브젝트_Bool0 또는 1 중 하나를 유지하며,true그리고.false또, 에서의 매크로입니다.stdbool.h.

BTW, 이는 C 프리프로세서가 다음 명령어를 해석하는 것을 의미합니다.#if true~하듯이#if 0~하지 않는 한stdbool.h포함되어 있습니다.한편 C++ 프리프로세서는 네이티브로 인식해야 합니다.true언어 문자 그대로입니다.

C99에 빌트인 추가_Bool데이터 유형(자세한 내용은 Wikipedia 참조) 및#include <stdbool.h>, 이 기능을 제공합니다.bool에 대한 매크로로서_Bool.

특히 Linux 커널에 대해 질문하셨습니다.의 존재를 전제로 하고 있다._Bool및 을 제공합니다.boolinclude/linux/types.h에 typedef를 입력합니다.

/* 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. */

C99는 Bool을 정의합니다.true그리고.falsestdbool.h.

stdbool.h매크로의 정의true그리고.false단, 1과 0으로 정의되어 있습니다.

그게 이유다sizeof(true)동등.sizeof(int)(32비트 아키텍처의 경우 4).

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) { ... }

C99에서 추가된 것은bool그러한 목적을 위해 의도된 사용자 정의 및 컴파일러 확장 유형을 포함하여 C에 존재했던 거의 모든 정수 유형의 의미와는 근본적으로 다른 의미이며, 일부 프로그램이 "type-defined"를 가질 수 있는 유형bool.

예를 들어,bool a = 0.1, b=2, c=255, d=256;, C99booltype을 지정하면 4개의 오브젝트가 모두 1로 설정됩니다.C89 프로그램이 사용되는 경우typedef unsigned char bool오브젝트는 각각0, 1, 255 및0 을 수신합니다.사용했을 경우char, 값은 위와 같을 수 있습니다.c-1 이 될 수 있습니다.컴파일러 확장을 사용한 경우bit또는__bittype, 결과는 0, 0, 1, 0(표준)이 될 수 있습니다.bit크기가 1인 부호 없는 비트 필드 또는 값 비트가 1개인 부호 없는 정수 유형과 동등한 방식으로.

_Bool C99의 키워드는 다음과 같습니다.int또는double.

6.5.2

2 유형 _Bool로 선언된 객체는 0과 1의 값을 저장할 수 있을 만큼 충분히 큽니다.

stdbool.h는 c99에서 도입되었습니다.

아니요, 없습니다.boolISO 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

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

언급URL : https://stackoverflow.com/questions/1608318/is-bool-a-native-c-type

반응형