3

"error: expected '}'"次の C++ ソースでコンパイルすると、「^」が指している場所を取得できます。

typedef enum { false, true } Boolean;
               ^

C ソースとしてコンパイルすると、このエラーは発生しません。

この理由は何ですか?私は困惑しています!

4

3 に答える 3

6

これを解決するには、次のことを行う必要があります。

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

そうすれば、C++ キーワード (trueおよびfalse) をenum.

于 2013-09-02T17:15:54.253 に答える
2

trueandfalseは C++のキーワードです。列挙型識別子では使用できません。

標準で言われているように:

2.12 キーワード [lex.key]

表 4 に示されている ID は、attribute-token を除き、キーワードとして使用するために予約されています (つまり、フェーズ 7 では無条件にキーワードとして扱われます)。

表 4:

 false
 ...
 true

C では、これらはキーワードではありません。コードは機能するはずですが、<stdbool.h>すでに定義しているtrueユーザーを含めfalseて、自分で定義する必要がないようにするのが最善です。

于 2013-09-02T17:15:11.243 に答える