2012-03-01 13 views
5

Estoy trabajando en un programa de depuración/registro y me preguntaba si sería posible crear una macro que pueda pegar dentro de cada función e imprimirá el nombre de la función y valores de parámetros cada vez que se llama a la función. El nombre de la función puede ser resuelto en tiempo de compilación, ¿el problema es averiguar cómo imprimir los valores de los parámetros?Macro para Obtener nombre de función y valores de parámetros desde la función

ACTUALIZACIÓN: Recuerdo haber leído un artículo para obtener los parámetros, pero el código de ensamblado y el manipular manipulando los punteros de pila, que no es compatible con plataformas cruzadas, algo que necesito.

+2

C o C++? Idiomas diferentes. – Puppy

+0

pero las macros deberían ser las mismas para ambas, las seleccioné para ampliar la audiencia – tunafish24

Respuesta

2

Puede usar la macro __FUNCTION__ o __func__ para el nombre de la función. Para los parámetros, no creo que haya una macro incorporada para lograr esto.

Otras macros útiles son __LINE__ y __FILE__.

EDIT:

__FUNCTION__ y __func__ no son parte de la norma, pero que tienen un amplio apoyo.

16,8 trata de macros predefinidas:

__cplusplus 
__DATE__ 
__FILE__ 
__LINE__ 
__STDC_HOSTED__ 
__TIME__ 

y macros definidos por la aplicación:

__STDC__ 
__STDC_VERSION__ 
__STDC_ISO_10646__ 
+3

'__func__' * es * parte del estándar, pero no es una macro. Quizás es por eso que no lo encontraste en ese lugar. –

+0

@JensGustedt estamos hablando del estándar de C++? –

+0

no, yo estaba hablando de C. En C11 es 6.4.2.2, un identificador predefinido, no una macro. AFAIR ya estaba en C99, por lo que también debería estar en C++. –

1

Para el nombre de la función, se puede utilizar el estándar (desde C99) identificador __func__.

En C++, el identificador de extensión GNU __PRETTY_FUNCTION__ también imprimirá los tipos de parámetros.

+0

El interlocutor afirmó que sabía cómo obtener el nombre de la función de una macro; su preocupación era imprimir los parámetros de la función. – Perry

0

No hay una forma portátil de obtener todos los valores de los parámetros e imprimirlos; ciertamente no se puede hacer desde una macro. Es posible que deba usar otro método para lograr lo que desea.

+0

¿cuál es el otro método? Ciertamente podría usar una macro para sustituir el código C. – tunafish24

+0

Podría hacer algo desagradable en el que hiciera todas sus declaraciones de funciones usando una macro que descartara el código para la declaración de la función y luego imprimiera sus valores al principio de la función. Esto no es bonito, no seguiría ese camino. De esa manera yace la locura. En el mundo real, simplemente use gdb o imprima lo que necesita cuando lo necesita. – Perry

+0

@Perry ¿cómo harías para eso? +1 de mí si puede proporcionar un ejemplo de trabajo. –

Cuestiones relacionadas