2010年02月09日

GCC で条件コンパイル時に未定義の識別子を警告するコンパイラオプション

GCC では -Wall を付けていても、条件コンパイル時に未定義のシンボル参照に対して警告が出ません。そのため、うっかり typo してしまった場合など、わかりにくいバグの原因となり得ます。
$ 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 でも警告は出ないようです。

トラックバック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じゃないとかなり見づらいんですけど
2. Posted by 若槻   2010年02月16日 13:19
なるほど、ありがとうございます。

# 実は手元のデフォルトコンパイラが VC6 だったので、/Wall が通らなかったので気が付きませんでした。

VC++ 2008 で /Wall と /w14668 などで警告が出ることを確認しました。

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード