【C/C++】C4006「#undef には定義を削除する識別子の名前が必要です」が発生する原因と対処法

#undef には定義を削除する識別子の名前が必要です」と警告が表示されてしまったことはありませんか?

警告なのでコンパイルエラーにはなりませんが、プログラムの書き方間違えているため修正する必要があります。

また、C4006警告は仕様上別の要因で発生するコンパイルエラーと併発するので、そちらについても見ていきましょう。

目次から探す

【C4006】「#undef には定義を削除する識別子の名前が必要です」の発生原因

「#undef には定義を削除する識別子の名前が必要です」が発生してしまう原因は、まさにundefプリプロセッサにて定義を削除するマクロ名の入力が漏れていることで発生します。

#undef  // C4006

int main() {
}

上記コード1行目を見ると、本来提示されるべきである#undefの対象マクロ名が抜けています。

こうなっているとC4006警告が発生します。

E0040エラーも併発

#undefで定義を削除するマクロ名の指定を忘れると、#undefの構文がおかしくなるので別のエラーが発生します。

その影響でコンパイルに通らなくなるので覚えておいてください。

この問題を解決したい場合は、警告が出ている行を再確認し、正しい構文になるように修正しましょう。

#undef SAMPLE // OK

事前に提示していないマクロ名を指定するだけでも警告が表示されなくなります。

逆に、スペルミスをしていても警告が出ないということですので注意してください。

目次から探す