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그리고.false에stdbool.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가 아님)의 키워드 목록입니다.
autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedstaticstructswitchtypedefunionunsignedvoidvolatilewhile
다음은 커널 및 표준에서 사용되는 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
'programing' 카테고리의 다른 글
| "npm run dev" 명령어를 사용하지 않고 서버에서 Vue.js 프로젝트를 실행하시겠습니까? (0) | 2022.08.09 |
|---|---|
| 인수 반환이 정의되지 않은 Vuex getters를 테스트하는 것은 함수가 아닙니다. (0) | 2022.08.09 |
| Vue mapActions 구성 방법 (0) | 2022.08.09 |
| Enum을 사용한 싱글턴 구현(Java) (0) | 2022.08.09 |
| Vue js에서 확인란이 선택되어 있는지 확인하는 방법 (0) | 2022.08.09 |