だから、以下のような使用はコンパイルエラーになる。
size_t some_func(void) { return strlen("<" __func__ ">"); } |
むしろ、以下の宣言と等価と考えた方がよい。
size_t some_func(void) { static const char __func__[] = "some_func"; return strlen("<" __func__ ">"); } |
これはGCCのマニュアルに明記されている。
__FILE__とか__LINE__は本物のマクロだから、strlen("<" __FILE__ ">")のような書き方ができる。
ただし、もう一つの注意点は、__FILE__はプリプロセッサがファイルを処理したときのファイルパスだから、#includeで展開されたファイルパスの__FILE__は、例えば /usr/include/myheader.h になるし、Linuxのカーネルのソースファイル中では fs/btrfs/inode.c のようになる。
0 件のコメント:
コメントを投稿