3

"error: expected '}'"当我在以下 C++ 源代码中编译时,我得到了 '^' 指向的位置:

typedef enum { false, true } Boolean;
               ^

当我将它编译为 C 源代码时,我没有收到此错误。

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

4

3 回答 3

16

false并且true是 C++ 关键字,因此您不能将它们用作enum标识符。

在 C 中,它们不是关键字,因此您的代码可以工作,但如果您包含,<stdbool.h>那么它将无法编译,因为该标头定义falsetrue宏。

请注意,您可能不应该自己实现布尔类型。C++ 已经具有该bool类型,如果您使用的是 C99 编译器,则可以包含stdbool.h. 这将为您提供一个bool具有falsetrue值的类型,类似于 C++。

于 2013-09-02T17:14:04.407 回答
6

要解决此问题,您需要执行以下操作:

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

true这样,您就不会尝试falseenum.

于 2013-09-02T17:15:54.253 回答
2

trueandfalse是 C++ 中的关键字。您不能在枚举标识符中使用它们。

正如标准中所说:

2.12 关键词[lex.key]

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

在表 4 中:

 false
 ...
 true

在 C 语言中,它们不是关键字,您的代码应该可以工作,但最好是包含<stdbool.h>已经定义的人truefalse然后您不需要自己定义它们。

于 2013-09-02T17:15:11.243 回答