2010年02月09日
GCC で条件コンパイル時に未定義の識別子を警告するコンパイラオプション
GCC では -Wall を付けていても、条件コンパイル時に未定義のシンボル参照に対して警告が出ません。そのため、うっかり typo してしまった場合など、わかりにくいバグの原因となり得ます。
-Wundef オプションにより、警告が出るようになります。
$ cat ifdef.c
#if UNDEFINED_SYMBOL
void f(void){}
#endif
$ gcc -Wall -c ifdef.c
-Wundef オプションにより、警告が出るようになります。
$ gcc -Wall -Wundef -c ifdef.c
ifdef.c:1:5: warning: "UNDEFINED_SYMBOL" is not defined
VC++ では同様のオプションを見つけられませんでした。
/W4 でも警告は出ないようです。
/W4 でも警告は出ないようです。
トラックバックURL
コメント一覧
1. Posted by 名無し 2010年02月16日 11:19
VCでは警告4668が該当する警告なので/Wallか/wN4668(N=1~4)で警告を出せます
http://msdn.microsoft.com/ja-jp/library/4dt9kyhy.aspx
windows.hの中で大量に出るのでinclude終わってから#pragma warningじゃないとかなり見づらいんですけど
http://msdn.microsoft.com/ja-jp/library/4dt9kyhy.aspx
windows.hの中で大量に出るのでinclude終わってから#pragma warningじゃないとかなり見づらいんですけど
2. Posted by 若槻 2010年02月16日 13:19
なるほど、ありがとうございます。
# 実は手元のデフォルトコンパイラが VC6 だったので、/Wall が通らなかったので気が付きませんでした。
VC++ 2008 で /Wall と /w14668 などで警告が出ることを確認しました。
# 実は手元のデフォルトコンパイラが VC6 だったので、/Wall が通らなかったので気が付きませんでした。
VC++ 2008 で /Wall と /w14668 などで警告が出ることを確認しました。