Search code examples
clinuxgccfunction-pointersgcc-warning

How to print the address of a function?


I let gcc 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?


Solution

  • 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');