toge's diary

コンピュータ関連の趣味をつらつらと。

__FUNCTION__の罠

うーん、あやうくハマるところだった。標準じゃないコンパイラの機能を使うのは危いねぇ。
gcc 2.95では__FUNCTION__は__FILE__と同じくプリプロセッサで処理されて文字リテラルになる。
gcc 3.4では__FUNCTION__は変数になる。
以下の「フリーソフトウェア徹底活用講座(8)」参照。

http://www.cqpub.co.jp/interface/column/freesoft/2003/200304/3.htm

ということで、以下のコードはgcc 2.95ではOK、gcc 3.4はNGになります。

printf(__FUNCTION__":%d\n", __LINE__); 

gcc 2.95前提のコードが世の中にはごろごろあるんだなぁと感心しました。