c - 在函数上使用 sizeof 的输出

标签 c sizeof

<分区>

为什么下面的代码给出:

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

相关文章:

对 C 指针释放感到困惑

c - 我如何让 child 打印杀死它的信号?

c - 如何迭代复合文字数组

c++ - 查找数组中某些元素的大小?

c - 正确使用 gluLookAt()?

c - 是否可以根据频率以编程方式编辑声音文件?

c++ - 如何从另一个程序运行一个程序并通过 C 或 C++ 中的标准输入将数据传递给它?

c - 我如何返回我用 malloc 分配的指针的大小?

c++ - Visual Studio 2010 C++ 编译器为类分配了错误的大小

c - 为什么数组大小为 1