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

use*_*698 3 c c++ enums boolean

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

typedef enum { false, true } Boolean;
               ^
Run Code Online (Sandbox Code Playgroud)

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

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

int*_*jay 16

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

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

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


Mat*_*son 6

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

#ifdef __cplusplus
  typedef bool Boolean;
#else
  typedef enum { false, true } Boolean;
#endif
Run Code Online (Sandbox Code Playgroud)

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