45

C++ で記述されたアプリケーションのソース コードがあり、次のようにコメントしたいだけです。

#ifdef 0
...
#endif

そして、私はこのエラーが発生します

エラー: マクロ名は識別子でなければなりません

なぜこうなった?

4

5 に答える 5

71

#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オプションを優先する必要があります。

于 2009-01-09T01:38:49.833 に答える
14

以下を使用して式を評価します (定数 0 は false と評価されます)。

#if 0
 ...
#endif
于 2009-01-09T01:33:51.340 に答える
6

このエラーは、マルコのルールに従っていない場合にも発生する可能性があります

お気に入り

#define 1K 1024 // Macro rules must be identifiers error occurs

理由: マクロは数字ではなく文字で始める必要があります

への変更

#define ONE_KILOBYTE 1024 // This resolves 
于 2011-11-09T05:37:48.590 に答える
1

誤って次のように入力した場合にも、このエラーが発生する可能性があることに注意してください。

#define <stdio.h>

...それ以外の...

#include <stdio.>
于 2013-02-02T23:00:07.783 に答える