C++で記述されたアプリケーションのソースコードがあり、次のコードを使用してコメントしたいだけです。
#ifdef 0
...
#endif
そして、私はこのエラーを受け取ります
エラー:マクロ名は識別子でなければなりません
なんでこんなことが起こっているの?
#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
ただし、シンボルがnotでないことを、自分以外のコードによって誤って設定されることを確信する必要があります。つまり、NOTUSED
やDONOTCOMPILE
など、他の人も使用するようなものは使用しないでください。安全のために、#if
オプションを優先する必要があります。
以下を使用して式を評価します(定数0はfalseと評価されます)。
#if 0
...
#endif
このエラーは、マルコルールに従っていない場合にも発生する可能性があります
お気に入り
#define 1K 1024 // Macro rules must be identifiers error occurs
理由:マクロは数字ではなく文字で始まる必要があります
への変更
#define ONE_KILOBYTE 1024 // This resolves
#ifdef 0
...
#endif
#ifdefは、定数または式を使用するときに式ではなくマクロを要求します
#if 0
...
#endif
または
#if !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
#ifdefが使用されている場合、このエラーを報告します
#ifdef !defined(PP_CHECK) || defined(PP_CHECK_OTHER)
..
#endif
#ifdefはマクロ表現ではなくマクロを予期する場所
誤って入力した場合にも、このエラーが発生する可能性があることに注意してください。
#define <stdio.h>
...の代わりに...
#include <stdio.>