Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我会得到;错误:应为';}'&引用;在C++;但不是用C? 我得到:错误:预期'}' /,当我在下面的C++源编译时,^ ^指向: typedef enum { false, true } Boolean; ^_C++_C_Enums_Boolean - Fatal编程技术网

为什么我会得到;错误:应为';}'&引用;在C++;但不是用C? 我得到:错误:预期'}' /,当我在下面的C++源编译时,^ ^指向: typedef enum { false, true } Boolean; ^

为什么我会得到;错误:应为';}'&引用;在C++;但不是用C? 我得到:错误:预期'}' /,当我在下面的C++源编译时,^ ^指向: typedef enum { false, true } Boolean; ^,c++,c,enums,boolean,C++,C,Enums,Boolean,当我把它编译成C源代码时,我没有得到这个错误 这是什么原因?我被难住了伪和Trime是C++关键字,因此不能用它们作为 EnUM < /Cuth>标识符。 在C语言中,它们不是关键字,因此代码可以工作,但如果包含,那么它将无法编译,因为该标题将false和true定义为宏 请注意,您可能不应该自己实现布尔类型。C++已经有了 BOOL类型,如果使用C99编译器,则可以包含 STDBOOL。这将给您一个 Boo.类型,它有“ false 和TrimeValue>>,类似于C++。 /P>< P>

当我把它编译成C源代码时,我没有得到这个错误


这是什么原因?我被难住了

<代码>伪和Trime是C++关键字,因此不能用它们作为<代码> EnUM < /Cuth>标识符。 在C语言中,它们不是关键字,因此代码可以工作,但如果包含
,那么它将无法编译,因为该标题将
false
true
定义为宏


请注意,您可能不应该自己实现布尔类型。C++已经有了<代码> BOOL类型,如果使用C99编译器,则可以包含<代码> STDBOOL。这将给您一个<代码> Boo.<代码>类型,它有“<代码> false
TrimeValue>>,类似于C++。<> /P>< P> <代码>真< //> >和<代码> false <代码>是C++中的关键字。不能在枚举标识符中使用它们

正如标准中所说:

2.12关键词[lex.key]

表4中所示的标识符保留用作关键字(即,它们在阶段7中被无条件地视为关键字),属性标记中除外

表4:

 false
 ...
 true

在C语言中,它们不是关键字,你的代码应该有效,但最好是包含已经定义了
true
false
,这样你就不需要自己定义它们了。

要解决这个问题,你需要:

#ifdef __cplusplus
  typedef bool Boolean;
#else
  typedef enum { false, true } Boolean;
#endif

这样,您不想在<代码> EnUM<代码>中使用C++关键字(<代码>真< /代码>和<代码> false <代码> >。P>不能将名称“代码> false < /COD>”和<代码>真< /代码>提交给C++中的任何东西。请注意,<代码>布尔O/COD>已经是C++中的一个类型, false , Trime<代码>是其值。为什么你要用枚举来重建BoL?C99中也有<代码> Boo.<代码>(包括<代码> <代码> >。@ USER 27 8698:不,用C++提供的相同的名字定义自己的BooS,是什么引起问题,我的意思是随着时间的推移而发展的代码,最初被认为是二进制的变量会突然变得更加复杂,就像这样:将“可能不需要”替换为“不应该”?如果你

#包括
,它肯定无法编译<代码>类型定义枚举{false,true}布尔值
将扩展为
typedef enum{0,1}布尔值布尔O/COD>。要解决这个问题,你应该写C或C++。编写有效C和有效C++的代码实际上是非常罕见的。