【问题标题】:Why i am getting sum as output even i am not returning the value? [duplicate]为什么即使我没有返回值,我也会得到 sum 作为输出? [复制]
【发布时间】:2018-06-06 15:37:00
【问题描述】:
sum(int a,int b)
{
    int x;
    x = a+b;
}
int main()
{ 
    printf("%d",sum(2,3));
}

如果我删除x,那么它将始终返回第一个参数,但我没有返回任何值。

【问题讨论】:

  • 更新了,因为这个问题用一个可编译的例子写得很好。请记住,C 让您有能力在脚下射击自己。这就是为什么你需要遵守规则。如果函数没有明确的返回类型,请使用编译器会呕吐:自 C99 以来已被禁止。
  • 你用什么ms office的程序来编译这个?
  • @PetarVelev:咳咳!我认为 Microsoft Excel 是有史以来最好的应用程序。
  • @Bathsheba 那你很可能真的没看过多少节目

标签: c function return


【解决方案1】:

您正在尝试使用函数调用返回值,而该函数中没有return 语句。

直接引用C11,第 §6.9.1 章(main()以外的函数脚注

如果到达终止函数的},并且函数调用的值被 调用者,行为未定义。


脚注:

从章节§5.1.2.2.3

[...] 到达} 会终止 main 函数返回值 0。

【讨论】:

  • 除 main() 之外。
  • @Bathsheba 确实如此,但递归调用 main 也不是一个好主意,:)
  • 值得添加到答案中以使其正确吗?请注意,从自身调用 main 是 C++ 中的 UB。
  • @Bathsheba 你去。 :)
  • @Bathsheba 你得教我不打印字符的诀窍,拜托。 :)
【解决方案2】:
int sum(int a,int b)
 {
     int x;
     x = a+b;
     return x;
 }
 int main()
 { 
     printf("%d",sum(2,3));
 }`

这就是你的代码应该是这样的,你会得到结果有时因为x 是一个局部变量,它的值在堆栈中持续存在直到它被覆盖,所以你最终可能会得到你想要的价值,否则你最终可能会得到一些垃圾

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2022-12-06
    • 2020-05-02
    • 2014-02-25
    • 2016-03-04
    • 1970-01-01
    • 2022-07-12
    相关资源
    最近更新 更多