C99 логический тип данных?

Ответы:

110

Включить <stdbool.h>заголовок

#include <stdbool.h>

int main(void){
  bool b = false;
}

Макросы trueи falseраскрыть до 1и 0соответственно.

Раздел 7.16 Логический тип и значения< stdbool.h >

  • 1 Заголовок <stdbool.h>определяет четыре макроса.
  • 2 Макрос
    • bool расширяется до _Bool.
  • 3 Остальные три макроса подходят для использования в директивах предварительной обработки #if. Они есть
    • истина: который расширяется до целочисленной константы 1,
    • false: расширяется до целочисленной константы 0, и
    • __bool_true_false_are_defined, который расширяется до целочисленной константы 1.
  • 4 Несмотря на положения 7.1.3, программа может отменить, а затем, возможно, переопределить макросы типа bool, true и false.
Prasoon Saurav
источник
18
Также следует отметить, что преобразование в _Bool(путем присваивания, приведения и т. Д.) Эффективно осуществляется путем добавления к выражению префикса !!.
R .. GitHub НЕ ПОМОГАЕТ ICE
56

Пожалуйста, ознакомьтесь с ответом здесь, в этой связанной теме, найденной на DaniWeb .

извлечены и процитированы здесь для удобства: -


использование новых ключевых слов в c99

_Bool : логический тип C99. Прямое использование _Bool рекомендуется только в том случае, если вы поддерживаете устаревший код, который уже определяет макросы для bool, true или false. В противном случае эти макросы стандартизированы в <stdbool.h> заголовке. Включите этот заголовок, и вы можете использовать bool так же, как в C ++.

#include <stdio.h>
#include <stdbool.h>

int main ( void )
{
  bool b = true;

  if ( b )
    printf ( "Yes\n" );
  else
    printf ( "No\n" );

  return 0;
}

Evandrix
источник
19
+1 за объяснение, почему _Boolсуществует вместе с bool. Очень полезно это понять.
eonil