Does C tem __func__ funcionalidade para nomes dos argumentos de uma função?

StackOverflow https://stackoverflow.com/questions/905999

  •  05-09-2019
  •  | 
  •  

Pergunta

Será que o "C" apoio algo padrão semelhante ao __func__ para nomes os argumentos da função?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top