view raw
alk alk - 7 months ago 44
C Question

How to print the address of a function?

I let

compile the following example using
-Wall -pedantic

#include <stdio.h>

int main(void)
printf("main: %p\n", main); /* line 5 */
printf("main: %p\n", (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?

R.. R..

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]);