IT story

'bool'은 C ++의 기본 데이터 유형입니까?

hot-time 2020. 12. 25. 09:31
반응형

'bool'은 C ++의 기본 데이터 유형입니까?


코드를 작성하는 동안이 의심이 생겼습니다. 'bool'은 C ++ 표준에 정의 된 기본 데이터 유형입니까, 아니면 컴파일러에서 제공하는 일종의 확장입니까? Win32에는 long typedef에 불과한 'BOOL'이 있기 때문에이 의심을 받았습니다. 또한 이렇게하면 어떻게 되나요?

int i = true;

변수 i가 값 1을 가질 것이라는 것이 "항상"보장됩니까, 아니면 다시 사용중인 컴파일러에 따라 달라지는가? 또한 BOOL을 매개 변수로 허용하는 일부 Win32 API의 경우 bool 변수를 전달하면 어떻게됩니까?


bool은 C ++의 기본 데이터 유형입니다. 변환 true1을 수득한다 정수형로 변환하고 false0 (4.5 / 4, 4.7 / 4)을 수득한다. C에서는 C99까지 bool 데이터 유형이 없었고 사람들은

enum bool {
    false, true
};

Windows API도 마찬가지입니다. C99부터는 _Bool기본 데이터 유형이 있습니다. 포함 stdbool.h됩니다 해당 형식 정의 #define 에 그 bool와 상수를 제공 true하고 false. 기존 코드와의 호환성 문제로 인해 bool을 기본 데이터 유형 (및 키워드)으로 만들지 않았습니다.


예, bool은 내장형입니다.

WIN32는 C ++가 아닌 C 코드이며 C에는 bool이 없으므로 자체 typedef BOOL을 제공합니다.


이 유형의 변수가있는 경우입니다 - C ++는 자동 캐스팅을 많이 수행 bool하고 기대 뭔가에 전달은 int, 그것이로를 만들 것입니다 int당신을 위해 - 0위해 false1위해 true.

이것이 보장되는지 확인하기 위해 내 표준이 없지만 내가 사용한 모든 컴파일러가 이것을 수행합니다 (따라서 항상 작동한다고 가정 할 수 있습니다).

그러나이 변환에 의존하는 것은 나쁜 생각입니다. int서명 을 오버로드하는 새 메서드가 추가되면 코드 컴파일이 중지 될 수 있습니다 .


네, 1993 년에 소개되었습니다.

추가 참조 : 부울 데이터 유형


C는 어셈블리 언어보다 한 단계 위 단계를 의미합니다. C if 문은 실제로 "branch-if-zero"에 대한 구문 적 설탕이므로, 부울을 독립적 인 데이터 유형으로 생각하는 것은 당시 외국 개념이었습니다. (1)

지금도 C / C ++ 부울은 일반적으로 단일 바이트 데이터 유형의 별칭에 불과합니다. 따라서 독립적 인 데이터 유형 이라기보다는 목적을위한 레이블에 가깝습니다.

(1) 물론 현대 컴파일러는 if 문을 처리하는 데있어 좀 더 발전했습니다. 이것은 새로운 언어로서의 C의 관점에서 볼 수 있습니다.


Turbo C 및 C ++ 컴파일러는 boolean (bool 키워드) 데이터 유형을 지원하지 않지만 dev C ++ 컴파일러는 boolean (bool 키워드) 데이터 유형을 지원합니다.


이제는 네이티브 유형이지만 여전히 리터럴 false이 0이고 true1 인 정수 (내 생각에는)로 정의되어 있습니다 . 그러나 모든 논리는 여전히 0이 아닌 것은 사실로 간주하므로 엄밀히 말하면 진정한 리터럴은 다음과 같습니다. 아마도 컴파일러가 무언가가 거짓이 아닌지 테스트하기위한 키워드 일 것입니다.

if(someval == true){

아마도 다음과 같이 번역됩니다.

if(someval !== false){ // e.g. someval !== 0

컴파일러에 의해

참조 URL : https://stackoverflow.com/questions/356726/is-bool-a-basic-datatype-in-c

반응형