有没有办法在ANSI C中打印指向函数的指针?当然,这意味着您必须将函数指针转换为void指针,但这似乎是不可能的?
#include <stdio.h>
int main() {
int (*funcptr)() = main;
printf("%p\n", (void* )funcptr);
printf("%p\n", (void* )main);
return 0;
}
$ gcc -ansi -pedantic -Wall test.c -o 测试test.c:功能正常 'main':test.c:6:警告:ISO C 禁止转换函数指针 对象指针类型test.c:7: 警告:ISO C禁止转换 指向对象指针的函数指针 键入$ ./test 0x400518 0x400518
这是“有效”,但非标准...
唯一合法的方法是使用字符类型访问组成指针的字节。像这样:
string.h
以外的额外依赖关系的效果>int (*funcptr)() = main;
void* p = NULL;
memcpy(&p, (void**) &funcptr, sizeof(funcptr));
printf("%p", p);