如果我们__func__
在 C (C99 / C11) 和 C++ 中的函数之外使用预定义变量会发生什么?
#include <stdio.h>
const char* str = __func__;
int main(void)
{
printf("%s", str);
return 0;
}
gcc 4.7.2 只给出警告(-Wall -W -pedantic
启用)并且什么也不打印。
标准没有明确说明:
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";
出现声明一样,其中 function-name 是词法封闭函数的名称。
UB?错误?或者是其他东西?