Я заметил, что в коде ядра 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.