Does C tem __func__ funcionalidade para nomes dos argumentos de uma função?
Pergunta
Será que o "C" apoio algo padrão semelhante ao __func__
para nomes os argumentos da função?
Solução
Se você quer uma solução rápida e suja para este make macros pré-processador como este ...
#define FUNCTION_HEADER(a) a { const char* __func__ = #a;
#define FUNCTION_FOOTER() }
... e usá-lo para seus cabeçalhos e rodapés função como este (testado com 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()
Isso deve funcionar exatamente como você quer, mas é feio.
Outras dicas
Não, o padrão C99 tem o seguinte:
6.10.8 predefinidos nomes de macro
Os seguintes nomes de macro será definida pela implementação:
__DATE__
__FILE__
__LINE__
__STDC__
__STDC_HOSTED__
__STDC_MB_MIGHT_NEQ_WC__
__STDC_VERSION__
__TIME__
Os seguintes nomes de macro são condicionalmente definido pela implementação:
__STDC_IEC_559__
__STDC_IEC_559_COMPLEX__
__STDC_ISO_10646__
6.4.2.2 predefinidos identificadores
O
__func__
identificador será declarado implicitamente pelo tradutor como se, imediatamente após a cinta de cada definição de função de abertura, a declaração
static const char __func__[] = "function-name";
apareceu, onde nome de função é o nome do function.63 lexicamente-encerrando)
gcc acrescenta alguma extensões , como imagino que outros compiladores fazer.