Bool은 토종 C형인가요?
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
데이터 유형(자세한 내용은 Wikipedia 참조) 및#include <stdbool.h>
, 이 기능을 제공합니다.bool
에 대한 매크로로서_Bool
.
특히 Linux 커널에 대해 질문하셨습니다.의 존재를 전제로 하고 있다._Bool
및 을 제공합니다.bool
include/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;
, C99bool
type을 지정하면 4개의 오브젝트가 모두 1로 설정됩니다.C89 프로그램이 사용되는 경우typedef unsigned char bool
오브젝트는 각각0, 1, 255 및0 을 수신합니다.사용했을 경우char
, 값은 위와 같을 수 있습니다.c
-1 이 될 수 있습니다.컴파일러 확장을 사용한 경우bit
또는__bit
type, 결과는 0, 0, 1, 0(표준)이 될 수 있습니다.bit
크기가 1인 부호 없는 비트 필드 또는 값 비트가 1개인 부호 없는 정수 유형과 동등한 방식으로.
_Bool
C99의 키워드는 다음과 같습니다.int
또는double
.
6.5.2
2 유형 _Bool로 선언된 객체는 0과 1의 값을 저장할 수 있을 만큼 충분히 큽니다.
stdbool.h는 c99에서 도입되었습니다.
아니요, 없습니다.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
그런 것은 없습니다.아마도 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 |