__func__
C (C99 / C11) および C++ で定義済みの変数を関数の外で使用するとどうなりますか?
#include <stdio.h>
const char* str = __func__;
int main(void)
{
printf("%s", str);
return 0;
}
-Wall -W -pedantic
gcc 4.7.2 は (有効な状態で)警告のみを表示し、何も出力しません。
標準はそれについて明示的に何も言いません:
ISO/IEC 14882:2011
8.4.1 一般 [dcl.fct.def.general]
8関数ローカルの定義済み変数
__func__
は、形式の定義static const char __func__[] = "function-name";
が提供されたかのように定義されます。ここで、関数名は実装定義の文字列です。そのような変数が、プログラム内の他のオブジェクトのアドレスとは異なるアドレスを持つかどうかは指定されていません。
ISO/IEC 9899:2011
6.4.2.2 事前定義された識別子
1識別子
__func__
は、各関数定義の左中括弧の直後に宣言があるかのように、翻訳者によって暗黙的に宣言されるものとしますstatic const char __func__[] = "function-name";
。ここで、関数名は字句的に囲んでいる関数の名前です。
ウブ?エラー?または、他の何か?