Я заметил, что в коде ядра Linux используется bool, но я думал, что bool - это тип С++. Является ли bool стандартным расширением C (например, ISO C90) или расширением GCC?
Является ли bool родным C-типом?
Ответ 1
bool существует в текущем C - C99, но не в C89/90.
В C99 нативный тип на самом деле называется _Bool, а bool - стандартный библиотечный макрос, определенный в stdbool.h (который, как ожидается, разрешается до _Bool). Объекты типа _Bool содержат либо 0, либо 1, а true и false также являются макросами из stdbool.h.
Ответ 2
C99 добавил встроенный тип данных _Bool (подробнее см. Wikipedia), и если вы #include <stdbool.h>, он предоставляет bool в качестве макроса до _Bool.
Вы спрашивали о ядре Linux в частности. Он предполагает наличие _Bool и предоставляет bool typedef непосредственно в include/linux/types.h.
Ответ 3
Нет, в ISO C90 нет bool.
Здесь список ключевых слов в стандарте 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
Ответ 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) { ... }
Ответ 5
/* 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. */
Ответ 6
_Bool - это ключевое слово в C99: он задает тип, точно так же, как int или double.
6.5.2
2 Объект, объявленный как тип _Bool достаточно велика, чтобы сохранить значения 0 и 1.
Ответ 7
C99 определяет bool, true и false в stdbool.h.
Ответ 8
stdbool.h был введен в c99
Ответ 9
Нет такой вещи, возможно, просто макроса для int
Ответ 10
stdbool.h определяет макросы true и false, но помните, что они определены как 1 и 0.
Вот почему sizeof(true) равно 4.