为什么我在 C++ 中得到"error: expected '}'",而在 C 中却没有?

Why am I getting "error: expected '}'" in C++ but not in C?

本文关键字:而在 expected C++ error 为什么      更新时间:2023-10-16

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

typedef enum { false, true } Boolean;
               ^

当我把它编译成C源代码时,我不会得到这个错误。

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

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

在C中,它们不是关键字,因此您的代码可以工作,但如果包含<stdbool.h>,则它将无法编译,因为该标头将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<stdbool.h>,然后您不需要自己定义它们。

相关文章: