"error: expected '}'"
次の C++ ソースでコンパイルすると、「^」が指している場所を取得できます。
typedef enum { false, true } Boolean;
^
C ソースとしてコンパイルすると、このエラーは発生しません。
この理由は何ですか?私は困惑しています!
これを解決するには、次のことを行う必要があります。
#ifdef __cplusplus
typedef bool Boolean;
#else
typedef enum { false, true } Boolean;
#endif
そうすれば、C++ キーワード (true
およびfalse
) をenum
.
true
andfalse
は C++のキーワードです。列挙型識別子では使用できません。
標準で言われているように:
2.12 キーワード [lex.key]
表 4 に示されている ID は、attribute-token を除き、キーワードとして使用するために予約されています (つまり、フェーズ 7 では無条件にキーワードとして扱われます)。
表 4:
false ... true
C では、これらはキーワードではありません。コードは機能するはずですが、<stdbool.h>
すでに定義しているtrue
ユーザーを含めfalse
て、自分で定義する必要がないようにするのが最善です。