为什么以下代码给出:
#include<stdio.h>
int voo()
{
printf ("Some Code");
return 0;
}
int main() {
printf ("%zu", sizeof voo);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下输出:
1
Run Code Online (Sandbox Code Playgroud)
C语言没有定义sizeof函数.该表达式sizeof voo违反了约束,并且需要来自任何符合C的编译器的诊断.
gcc将函数指针上的指针算法实现为扩展.为了支持这一点,gcc任意假设函数的大小为1,因此在函数地址中添加42,就会得到一个超出函数地址42个字节的地址.
它们对void做了同样的事情,因此允许sizeof (void)产生1和指针算术运算void*.
如果要编写可移植代码,最好避免这两个功能.使用-ansi -pedantic或-std=c99 -pedantic获取此类事件的警告.
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |