我gcc使用以下代码编译以下示例-Wall -pedantic:
gcc
-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; }
我得到:
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
第5行像第6行一样更改了代码。
在打印函数的地址时,我缺少删除警告的内容吗?
本质上,这是打印函数指针的唯一可移植方式。
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');