如何在C头文件中向前声明'bool'类型?

如何在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数据类型?如果

考虑具有以下函数头的头文件,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”,则应包含“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