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