que vamos gcc
compilar el siguiente ejemplo usando -Wall -pedantic
:Cómo imprimir la dirección de una función?
#include <stdio.h>
int main(void)
{
printf("main: %p\n", main); /* line 5 */
printf("main: %p\n", (void*) main); /* line 6 */
return 0;
}
me sale:
main.c:5: warning: format ‘%p’ expects type ‘void *’, but argument 2 has type ‘int (*)()’
main.c:6: warning: ISO C forbids conversion of function pointer to object pointer type
Línea 5 hizo que mi cambio del código, como en la línea 6.
¿Cuál falto de eliminar la advertencia al imprimir la dirección de una función?
No estoy seguro si está disponible para usted, pero es posible investigar el uso de register_printf_function a [definir su propio carácter especial y un convertidor de formato] (http://www.gnu.org/software/libc/manual/html_node/ Customizing-Printf.html # Customizing-Printf). –
El problema no es que sea "peligroso". El problema es que la conversión no está definida por el lenguaje C y, por lo tanto, no se puede usar para conformar el código C. Puede lanzar a través de un tipo de entero intermedio (resultados definidos por la implementación) siempre que sepa que existe uno que puede contener tanto punteros de función como de objeto). –
@BobJarvis ¿Tiene alguna idea de cómo evitar 'gcc' quejarse del carácter de tipo de conversión recientemente introducido (' advertencia: carácter de tipo de conversión desconocido 'P' en formato') al compilar con la opción '-Wall'? Pero esta también es otra historia ... – alk