I let gcc
compile the following example using -Wall -pedantic
:
#include <stdio.h> int main(void) { printf("main: %pn", main); /* line 5 */ printf("main: %pn", (void*) main); /* line 6 */ return 0; }
I get:
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
Line 5 made my change the code like in line 6.
What am I missing to remove the warning when printing a function’s address?
Advertisement
Answer
This is essentially the only portable way to print a function pointer.
size_t i; int (*ptr_to_main)() = main; for (i=0; i<sizeof ptr_to_main; i++) printf("%.2x", ((unsigned char *)&ptr_to_main)[i]); putchar('n');