为什么下面的代码给出:
#include<stdio.h>
int voo()
{
printf ("Some Code");
return 0;
}
int main() {
printf ("%zu", sizeof voo);
return 0;
}
以下输出:
1
C语言没有定义sizeof
对于功能。表达方式sizeof voo
违反了约束,并且需要任何符合标准的 C 编译器进行诊断。
gcc 作为扩展实现了函数指针的指针运算。为了支持这一点,gcc 任意假设函数的大小为 1,因此将 42 添加到函数的地址将得到超出函数地址 42 个字节的地址。
他们对 void 做了同样的事情,所以sizeof (void)
产生 1,并且指针算术void*
是允许的。
如果您想编写可移植代码,最好避免这两个功能。使用-ansi -pedantic
or -std=c99 -pedantic
以获得此类事情的警告。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)