隐式返回返回类型变量



当我意识到我忘记了函数中的返回语句时,我注意到这一点,但我仍然像预期的那样获得值。所以我试着在一个简单的程序中重现这种情况,它做了同样的事情——返回预期的值,而没有显式的返回语句。

我注意到如果我将printf格式说明符类型从f更改为d,它就不起作用了。或者如果我创建了一个名为double tau = 6.2830的变量,但是有多个返回类型的变量导致最后定义的变量被返回。

所以我的结论是,这是编译器的工作来纠正我的错误,但这似乎不是很有帮助,我希望这是一个错误,而不是一个警告隐藏除了使用-Wall或其他一些相关的标志。

我的结论是正确的吗?这个设计决策背后的原因是什么?

#include <stdio.h>                                                              
float pi() {                                                                                                                           
    float pi = 3.1415;
    // float tau = 6.2830;    // this will now return instead
    // double cthulhu = -000000.000000011101; // this will not allow it to work                                                      
}                                                                               
int main() {                                                                    
    float num;                                                                  
    num = pi();                                                                 
    printf("Some number is %f", num);       // changing %f to %d will also not allow it to work                                    
    return 0;                                                                   
} 
编制

g++ test.cpp -o test

输出
$ ./test
Some number is 3.141500

带有-Wall标志的编译器输出

a.cpp: In function ‘float pi()’:
a.cpp:4:11: warning: unused variable ‘pi’ [-Wunused-variable]
     float pi = 3.1415;
           ^~
a.cpp:5:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }

您的函数没有return语句(这是编译器警告清楚地告诉您的),并且没有像这样的东西隐式返回类型或变量。如果该函数有未定义的行为,请消化它。

使用

float pi() {                                                                
    return 3.1415f;
}

或者像

这样的简单声明
constexpr float pi = 3.1415f;

最新更新