Есть ли в C функциональность __func__ для имен аргументов функции?
Вопрос
Поддерживает ли стандарт «C» что-то похожее на __func__
для имен аргументов функции?
Решение
если вам нужно быстрое и грязное решение для этой проблемы, создайте такие макросы препроцессора...
#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }
...и используйте его для заголовков и нижних колонтитулов функций, как показано ниже (протестировано на VS 2008):
#include <windows.h>
#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }
FUNCTION_HEADER( int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) )
MessageBoxA(0, __func__, __func__, MB_OK);
return 0;
FUNCTION_FOOTER()
Это должно работать именно так, как вы хотите, но это некрасиво.
Другие советы
Нет, стандарт C99 имеет следующее:
6.10.8 Предопределенные имена макросов
Следующие имена макросов должны быть определены реализацией:
__DATE__
__FILE__
__LINE__
__STDC__
__STDC_HOSTED__
__STDC_MB_MIGHT_NEQ_WC__
__STDC_VERSION__
__TIME__
Следующие имена макросов условно определены реализацией:
__STDC_IEC_559__
__STDC_IEC_559_COMPLEX__
__STDC_ISO_10646__
6.4.2.2 Предопределенные идентификаторы
Идентификатор
__func__
должен быть неявно объявлен переводчиком, как если бы, сразу же после открывающейся скошки каждого определения функции, объявление
static const char __func__[] = "function-name";
появилось, где имя-функции — имя лексически включающей функции.63)
gcc добавляет немного расширения, как я полагаю, делают другие компиляторы.