<分区>
为什么下面的代码给出:
#include<stdio.h>
int voo()
{
printf ("Some Code");
return 0;
}
int main() {
printf ("%zu", sizeof voo);
return 0;
}
以下输出:
1
<分区>
为什么下面的代码给出:
#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
或 -std=c99 -pedantic
获取此类事件的警告。
关于c - 在函数上使用 sizeof 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6988227/