在函数上使用sizeof的输出

Exp*_*ice 5 c sizeof

为什么以下代码给出:

#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)

Kei*_*son 9

C语言没有定义sizeof函数.该表达式sizeof voo违反了约束,并且需要来自任何符合C的编译器的诊断.

gcc将函数指针上的指针算法实现为扩展.为了支持这一点,gcc任意假设函数的大小为1,因此在函数地址中添加42,就会得到一个超出函数地址42个字节的地址.

它们对void做了同样的事情,因此允许sizeof (void)产生1和指针算术运算void*.

如果要编写可移植代码,最好避免这两个功能.使用-ansi -pedantic-std=c99 -pedantic获取此类事件的警告.