如何在C头文件中向前声明'bool'类型?
考虑具有以下函数头的头文件,myheader.h:如何在C头文件中向前声明'bool'类型?,c,C,考虑具有以下函数头的头文件,myheader.h: bool isValid(char c); 其实现文件myimplementation.c包含: #include <stdbool.h> bool isValid(char c) { return c == 'Y' || c == 'N'; } #包括 bool是有效的(字符c){ 返回c='Y'| c=='N'; } 如果希望避免在头文件中包含stdbool.h,如何正确地在头文件中“正向声明”bool数据类型?如果
bool isValid(char c);
其实现文件myimplementation.c包含:
#include <stdbool.h>
bool isValid(char c) {
return c == 'Y' || c == 'N';
}
#包括
bool是有效的(字符c){
返回c='Y'| c=='N';
}
如果希望避免在头文件中包含stdbool.h,如何正确地在头文件中“正向声明”bool
数据类型?如果希望包含“bool”,则应包含“stdbool.h”:
布尔类型支持库
从C99开始,C编程语言支持布尔运算
使用内置类型_Bool(请参阅_Bool)。当标题
如果包含,则布尔类型也可以作为bool访问
宏
Macro name Expands to
---------- ----------
bool _Bool
true integer constant 1
false integer constant 0
__bool_true_false_are_defined integer constant 1
如果包含在每个使用“bool”的源文件中真的让你恼火,Ted Lyngmo提出了一个很好的建议:只需定义自己的头文件,并在其中包含stdbool.h。首先,不需要声明
bool
;您只需将函数声明为\u Bool isValid(charc)代码>
其次,C 2018 7.18 2说
将bool
定义为一个被\u bool
取代的宏。您只需使用\define bool\u bool
自己完成即可。7.18.4规定程序可以取消定义并重新定义bool
。为了学究式的和更加安全地遵守这一点,您可以使用:
#undef bool
#define bool _Bool
为什么要避免头文件中包含#include
?它的内容不会太多。你可以在标题中包含你需要的内容。其他需要你的标题的人将得到你提供的。它可能是宏bool
(对于\u bool
),或者-你可以决定在你的代码中使用关键字\u bool
,把所有这些都抛在脑后。我不确定我的建议是什么:-)我建议使用关键字\u bool
-你很少会在关键字上出错。@Ted Lyngmo:很公平:\u bool
是标准的C99;不需要标题。我以为你建议使用标题作为OP使用“bool”的一种方式,而不必包括。坦白地说,我不知道为什么有人会对“\u Bool”或“.”有问题。但是如果OP不喜欢这两种方法,那么定制应用程序头将是一个合理的选择。标题可以#包含
,也可以#定义bool#u bool
。