在下面的参数n中函数返回是什么?我的代码是什么?

时间:2015-02-15 22:41:05

标签: c return-value

参数n的函数返回是什么?请帮我理解?

unsigned int f(unisigned int n)  // function declaration
{

       // wht f function return in term of argument n?

 } 

2 个答案:

答案 0 :(得分:2)

如果调用代码试图访问返回值,那么它将是未定义的行为:

但是,如果从未使用过返回值,那么它定义明确,没有什么特别的事情发生。编译器不需要发出警告。

int main()
{
    foo(6);    // OK

    unsigned int foo = f(5);    // UB
}

当然,故意编写这样的代码是一个糟糕的主意。

答案 1 :(得分:0)

虽然此问题与Why does this C++ snippet compile (non-void function does not return a value)不完全相同,但它包含了answer Shafik Yaghmour的优秀问题:

  

这是undefined behavior   C++11 draft standard   部分6.6.3 返回声明 2 ,其中说:

     
    

[...]离开函数末尾相当于没有值的返回;这会导致值返回时出现未定义的行为     功能。 [...]

  
     

这意味着编译器没有义务提供错误也没有   警告通常是因为在所有情况下都很难诊断。   我们可以从 undefined behavior 的定义中看出这一点   1.3.24部分中的标准草案,其中说:

     
    

[...]允许的未定义行为范围从完全忽略不可预测的结果,到行为期间的行为     以文件化的方式执行翻译或程序执行     环境(有或没有发布诊断     消息),终止翻译或执行(与发行     诊断信息)。[...]

  
     

虽然在这种情况下我们可以同时获得gccclang来生成   使用-Wall标志警告,这给我一个类似的警告   这样:

     
    

警告:控制到达非空函数的末尾[-Wreturn-type]

  

理论上,任何都可能来自未定义的行为。实际上,你可能会得到一个垃圾结果。