You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于C语言中void函数sizeof结果为1的原因咨询

为什么用sizeof获取void函数调用的结果是1,而int函数是4?

我在学习C语言时接触到void函数,知道这类函数不返回值但可以包含return语句。我尝试用sizeof运算符获取该函数调用后的大小,结果显示为1;而int类型函数的sizeof结果为4。想请教一下这背后的原因是什么?

测试代码如下:

#include <stdio.h>
void my_func() {
    printf("From void my_function\n");
    return ;
}
int func() {
    printf("From int func\n");
    return 0;
}
int main() {
    printf("Size of void function : %lu\n",sizeof(my_func())); // 输出1
    printf("Size of integer function : %lu\n",sizeof(func())); // 输出4
    return 0;
}

解答

这个问题其实涉及到C标准规定和编译器扩展的细节,咱们一步步来理清楚:

  • 先看int func()的情况:你调用func()得到的是一个int类型的返回值,sizeof(func())本质上就是sizeof(int)。在大多数系统里int类型占4字节,所以输出4,这部分逻辑很直观。

  • 再重点说void my_func()的情况:严格来说,C标准里不允许对void类型的表达式使用sizeof运算符,因为void代表“无类型”,没有具体的大小可言。但像GCC这类常用编译器做了非标准扩展——当你对void类型表达式用sizeof时,它会默认返回1。这个1并不是真的代表某个实际类型的大小,更像是编译器给出的一个“占位值”,用来让这类不符合标准的代码能编译通过(常见于一些奇技淫巧的泛型编程写法)。

  • 还有个容易被忽略的细节:你写的sizeof(my_func())和sizeof(func())里,函数其实根本不会被执行!因为sizeof是编译期运算符,它只需要知道表达式的类型就能计算大小,不会运行表达式本身。不信你运行程序看看,两个函数里的printf其实都不会输出内容~

  • 最后要提醒:这种对void表达式用sizeof的写法是依赖编译器扩展的,并不符合C标准,换个编译器(比如某些严格遵循标准的编译器)可能直接报错,所以实际开发里尽量别这么写。

内容的提问来源于stack exchange,提问作者bhanu krishna bhanu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 12:42:46