我想在我的系统上找到_Bool
定义,因此对于缺少它的系统,我可以实现它。我在这里和其他网站上看到过各种各样的定义,但是想要检查一下系统的最终定义。
轻微的问题,因为我找不到_Bool定义的地方甚至是stdbool.h
mussys@debmus:~$ find /usr/include/* -name stdbool.h
/usr/include/c++/4.3/tr1/stdbool.h
grep
和_Bool
/usr/include/*
的{{1}}也找不到。
那它在哪里?
答案 0 :(得分:13)
_Bool
是内置类型,所以不要期望在头文件中找到它的定义,甚至是系统头文件。
话虽如此,从你正在搜索的路径猜测你的系统,你看过/usr/lib/gcc/*/*/include
吗?
我的“真实”stdbool.h
住在那里。正如所料,#define
bool
为_Bool
。由于_Bool
是编译器的本机类型,因此头文件中没有它的定义。
答案 1 :(得分:7)
作为说明:
_Bool在C99中定义。如果您使用以下代码构建程序:
gcc -std=c99
你可以期待它在那里。
答案 2 :(得分:4)
其他人已回复_Bool
位置上的问题并查明是否宣布了C99 ......但是,我对每个人都给出的自制声明不满意。
为什么不完全定义类型?
typedef enum { false, true } bool;
答案 3 :(得分:2)
_Bool
是C99中的预定义类型,非常类似于int
或double
。您也不会在任何头文件中找到int
的定义。
你能做的是
_Bool
int
或unsigned char
)例如:
#if defined __STDC__ && defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
/* have a C99 compiler */
typedef _Bool boolean;
#else
/* do not have a C99 compiler */
typedef unsigned char boolean;
#endif
答案 4 :(得分:2)
有些编译器不提供_Bool关键字,所以我编写了自己的stdbool.h:
#ifndef STDBOOL_H_
#define STDBOOL_H_
/**
* stdbool.h
* Author - Yaping Xin
* E-mail - xinyp at live dot com
* Date - February 10, 2014
* Copyright - You are free to use for any purpose except illegal acts
* Warrenty - None: don't blame me if it breaks something
*
* In ISO C99, stdbool.h is a standard header and _Bool is a keyword, but
* some compilers don't offer these yet. This header file is an
* implementation of the stdbool.h header file.
*
*/
#ifndef _Bool
typedef unsigned char _Bool;
#endif /* _Bool */
/**
* Define the Boolean macros only if they are not already defined.
*/
#ifndef __bool_true_false_are_defined
#define bool _Bool
#define false 0
#define true 1
#define __bool_true_false_are_defined 1
#endif /* __bool_true_false_are_defined */
#endif /* STDBOOL_H_ */
答案 5 :(得分:0)
$ echo '_Bool a;' | gcc -c -x c -
$ echo $?
0
$ echo 'bool a;' | gcc -x c -c -
<stdin>:1: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘a’
这表明_Bool
是内置类型而bool
不是,通过编译没有包含的单个变量声明。