"error: expected '}'"
当我在以下 C++ 源代码中编译时,我得到了 '^' 指向的位置:
typedef enum { false, true } Boolean;
^
当我将它编译为 C 源代码时,我没有收到此错误。
这是什么原因?我难住了!
false
并且true
是 C++ 关键字,因此您不能将它们用作enum
标识符。
在 C 中,它们不是关键字,因此您的代码可以工作,但如果您包含,<stdbool.h>
那么它将无法编译,因为该标头定义false
为true
宏。
请注意,您可能不应该自己实现布尔类型。C++ 已经具有该bool
类型,如果您使用的是 C99 编译器,则可以包含stdbool.h
. 这将为您提供一个bool
具有false
和true
值的类型,类似于 C++。
要解决此问题,您需要执行以下操作:
#ifdef __cplusplus
typedef bool Boolean;
#else
typedef enum { false, true } Boolean;
#endif
true
这样,您就不会尝试false
在enum
.
true
andfalse
是 C++ 中的关键字。您不能在枚举标识符中使用它们。
正如标准中所说:
2.12 关键词[lex.key]
表 4 中显示的标识符保留用作关键字(即,它们在阶段 7 中被无条件地视为关键字),但在属性标记中除外。
在表 4 中:
false ... true
在 C 语言中,它们不是关键字,您的代码应该可以工作,但最好是包含<stdbool.h>
已经定义的人true
,false
然后您不需要自己定义它们。