2009-05-25 1 views
2

Поддерживает ли стандарт «C» что-то похожее на __func__ для имен аргументов функции?Имеет ли C функциональность __func__ для имен аргументов функции?

+0

Вам нужно будет немного рассказать об этом ... – Stephan202

+2

Я думаю, что он хочет спросить, есть ли у C какой-либо макрос, который расширяется до параметров функции, в которой он находится, а ответ - нет. – Blindy

ответ

3

, если вы хотите быстро и грязный раствор для этой марки препроцессора макросы, как это ...

#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() 

Это должно работать именно так, как вы хотите, но это уродливо.

+0

Уродливо, но делает работу :-) – 2009-05-25 10:52:30

5

Нет, стандарт 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"; 

появилось, где function-name - имя лексически-enc потеря функции.63)

gcc добавляет extensions, как я думаю, другие компиляторы делают.

Смежные вопросы