__func__ С++ 11 функция локальная предопределенная переменная, не будет компилироваться
Локальная предопределенная переменная функции __func__
С++ 11 не компилируется в Visual Studio 2012 Professional (с установленным Update 1) с встроенным компилятором Visual Studio 2012 (v110) или ноябрьским 2012 CTP ( v120_CTP_Nov2012). Тем не менее, редактор не жалуется на красную короткую подчеркивание в __func__
. __func__
должен указывать имя его содержащей функции, в данном случае foo
, но это не компилируется и не вызывает редактор:
#include <iostream>
using namespace std;
void foo()
{
cout << __func__ << endl;
return;
}
int main()
{
foo();
return 0;
}
Он дает ошибку компилятора:
error C2065: '__func__' : undeclared identifier
Я что-то пропустил в своем коде или это будет работать в будущем обновлении?
Ответы
Ответ 1
Поддержка MSVC C99 в целом неплохая; лучше всего использовать макрос __FUNCTION__
, специфичный для MSVC. См. Этот вопрос для деталей: Кросс-платформенное определение #define для макросов __FUNCTION__ и __func__
Обновление (2015-06-22): Visual Studio 2015 поддерживает __func__
, см. сообщение в блоге
Ответ 2
Скомпилируйте программу, используя стандарты С++ 11, поскольку __func__
- это функция С++ 11.
Итак, скомпилируйте его так:
g++ -std=c++11 foo.cpp -o foo