1. ホーム
  2. c++

[解決済み】エラー:マクロ名は #ifdef 0 を使って識別子でなければならない

2022-01-30 12:46:11

質問

C++で書かれたアプリケーションのソースコードがあるのですが、それを使って何かコメントしたいのです。

#ifdef 0
...
#endif

そして、このエラーが表示されます。

error: マクロ名は識別子でなければならない

なぜこのようなことが起こるのでしょうか?

解決方法は?

ifdef ディレクティブは プリプロセッサ・シンボルが定義されている場合。 標準的な( C11 6.4.2 Identifiers ) は、識別子を数字で始めてはいけないと定めています。

identifier:
    identifier-nondigit
    identifier identifier-nondigit
    identifier digit
identifier-nondigit:
    nondigit
    universal-character-name
    other implementation-defined characters>
nondigit: one of
    _ a b c d e f g h i j k l m
    n o p q r s t u v w x y z
    A B C D E F G H I J K L M
    N O P Q R S T U V W X Y Z
digit: one of
    0 1 2 3 4 5 6 7 8 9

プリプロセッサーを使ってコードをブロック化する場合の正しい形は

#if 0
: : :
#endif

を使うこともできます。

#ifdef NO_CHANCE_THAT_THIS_SYMBOL_WILL_EVER_EXIST
: : :
#endif

が、そのシンボルが必ず ない は、自分以外のコードによって不用意に設定されることがあります。言い換えれば、次のようなものは使わないでください。 NOTUSED または DONOTCOMPILE というように、他の人も使う可能性があります。安全のために #if オプションを使用することをお勧めします。