Хотя стандарт C не требует части заголовка cpp, все же, если вы посмотрите на широко используемые компиляторы, такие как реализация G CC файла stdbool.h (аналог Clang), вы увидите
#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#else /* __cplusplus */
/* Supporting <stdbool.h> in C++ is a GCC extension. */
#define _Bool bool
#define bool bool
#define false false
#define true true
#endif /* __cplusplus */
/* Signal that all the definitions are present. */
#define __bool_true_false_are_defined 1
#endif /* stdbool.h */
В C case true
и false
по сути являются целочисленными литералами, поэтому вы получите sizeof(int)
. Но в случае C ++ с этим заголовком практически ничего не происходит, поэтому вы получите sizeof(bool)
, который обычно равен 1, но на самом деле это определенная реализация.
Если вы сделаете это в C ++, вы получите такой же результат, как в C.
#include<stdio.h>
#include<stdbool.h>
#define true 1
#define false 0
int main()
{
printf("%zu",sizeof(true));
printf("%zu",sizeof(false));
}