Что произойдет, если мы используем предопределенную переменную __func__
вне функции в C (C99/C11) и С++?
#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? Ошибка? Или что-то еще?