为什么我在C ++中得到“错误:期望’}’”但在C中没有?

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

 typedef enum { false, true } Boolean; ^ 

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

这是什么原因? 我很难过!

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

在C中它们不是关键字,所以你的代码可以工作,但如果你包含那么它将无法编译,因为该标题定义为falsetrue为宏。

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

要解决这个问题,您需要做:

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

这样,您就不会尝试在enum使用C ++关键字( truefalse )。

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

正如标准中所说:

2.12关键字[lex.key]

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

在表4中:

  false ... true 

在C中,它们不是关键字,您的代码应该可以工作,但最好应该包括已经定义了truefalse ,然后您不需要自己定义它们。