在C中获取sizeof一个void(*)()函数指针

时间:2016-02-08 08:21:36

标签: c

为了帮助我在C中进行一些精确的内存分配,我试图让sizeof函数指针用于返回类型为void的函数没有参数。

但是,当我执行sizeof (void (*)())时,我会生成编译器警告:

function declaration isn’t a prototype [-Wstrict-prototypes]

如何获得我正在寻找的尺寸?

2 个答案:

答案 0 :(得分:5)

这是一个旧式函数定义,它缺少参数列表,所以添加它们:

sizeof( void(*)(void) )

答案 1 :(得分:2)

出于可读性目的,我建议为你想要的任何函数的签名声明一个类型:

 typedef void my_sigt(void);

然后,要声明一个指向这样一个函数的指针,代码:

 my_sigt* funptr;

并获取其大小代码sizeof(my_sigt*)(如果您有这样的变量sizeof(funptr),则为funptr

BTW,我不确定C99标准是否保证每个函数指针都具有相同的大小(或者与某些数据指针具有相同的大小)。但是POSIX要求(特别是能够使用dlsym来动态链接这些函数)。

相关问题