是否总是需要返回声明?

时间:2018-07-31 15:22:54

标签: c return

两者之间有什么区别

while

#include <stdio.h>

int f(int x){
    return x*x - 3;
}

int main(){
    int x = 4;
    printf("f(%d) = %d\n", x, f(x));
    return 0;
}

因为这两个编译没有错误(使用gcc),并且两个都正常工作。 第一次回来真的很重要吗?

1 个答案:

答案 0 :(得分:8)

第二个代码段调用undefined behaviour

一个到达结尾}并且在调用方中使用返回值的函数将调用未定义的行为。

引用C11,第6.9.1章

  

如果到达终止函数的},并且函数调用的值由   调用者,行为是不确定的。

是的,对于功能

  • 返回void以外的任何东西(其值将在调用方中使用),必须包含带有表达式的return语句,该表达式具有一个 类型与函数的返回类型相同。
  • 返回void可以有一个return语句,不带任何表达式。但是,this can be also be omitted没有任何麻烦。

注意:仅仅因为“您的”编译器(设置)会编译代码并生成二进制文件,并不意味着该代码正确。使用所有警告标记和严格检查,它们将为您节省很多麻烦