为了帮助我在C
中进行一些精确的内存分配,我试图让sizeof
函数指针用于返回类型为void的函数没有参数。
但是,当我执行sizeof (void (*)())
时,我会生成编译器警告:
function declaration isn’t a prototype [-Wstrict-prototypes]
如何获得我正在寻找的尺寸?
答案 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来动态链接这些函数)。