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

求和函数未添加return语句却正常运行,原因是什么?

无return语句的int函数为何能返回正确结果?

先看你给出的代码:

#include <stdio.h>

int summation(int sum)
{
    if (sum == 1)
    {
        return 1;
    }

    int s=0;
    s = sum + summation(sum - 1);
}

void main()
{
    printf("%d", summation(5));
}

这本质是未定义行为下的巧合结果,不是合法的C语言逻辑,具体原因和编译器的调用约定有关:

  • 主流x86架构的编译器(比如GCC、Clang)对返回int类型的函数,会约定用eax寄存器传递返回值。
  • 执行s = sum + summation(sum - 1);时,递归调用summation(sum-1)的返回值已经存在eax里,和sum相加后的结果也会存在eax寄存器中。
  • 虽然函数没写return s;,但函数结束后,调用者依然会从约定的eax寄存器读取返回值,刚好这个值就是s的计算结果,所以碰巧输出了15。

但这种情况绝对不能依赖:

  • 换个编译器、调整优化等级、改架构(比如ARM),或者修改函数内的代码逻辑,结果可能直接出错甚至程序崩溃。
  • 根据C语言标准,返回非void类型的函数如果没有return语句,属于未定义行为,编译器可以做任何处理,没有任何可靠性保证。

内容的提问来源于stack exchange,提问作者Aryan Mane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:52:11