2012-01-04 1 views
40

Может ли кто-нибудь объяснить мне, в чем разница между типами данных _Bool и bool в C? Например,Разница между типами _Bool и bool в C?

_Bool x = 1; 
    bool y = true; 

    printf("%d", x); 
    printf("%d", y); 
+1

'bool' тоже должен быть typedef, C не имеет такого типа. –

+0

Аналогично _Complex vs complex. –

ответ

87

Эти типы данных были добавлены в C99. Поскольку bool не был зарезервирован до C99, они используют ключевое слово _Bool (которое было зарезервировано).

bool является псевдонимом для _Bool, если вы указали stdbool.h. В принципе, в том числе заголовок stdbool.h является указанием на то, что ваш код в порядке, а идентификатор bool является «зарезервированным», то есть ваш код не будет использовать его для своих целей (аналогично для идентификаторов true и false).

+4

+1 для включения истории. – Lindydancer

+18

Долгосрочное намерение заключается в том, что стандарт будет в конечном итоге пересмотрен, чтобы сделать bool ключевым словом. Это шаг 1, где вы можете использовать , чтобы получить макрос bool, и вам по-прежнему разрешено определять или переопределять его для ваших собственных гнусных целей. Шаг 2 должен отказать в определении или переопределении bool от , чтобы отбить такие махинации. Затем шаг 3 состоит в том, чтобы сделать bool ключевым словом точно как _Bool и отметьте _Bool устаревшим. В конце этого длинного пути (скажем, через десять или два года) стандартный код C будет иметь тип bool, а новые программисты не будут знать, что ему когда-либо не хватало одного. – tialaramex

+2

Я не понимаю, почему это должно пройти два десятилетия, учитывая, что это довольно очевидное улучшение. Код, который не нравится это изменение, все еще может быть скомпилирован с использованием текущих версий компилятора. –

13

Нет разницы.

bool - макрос, который расширяется до _Bool в stdbool.h.

И true является макро, которая расширяется до 1 в stdbool.h

Смежные вопросы