C ++隐式返回返回类型变量

时间:2016-09-17 05:24:03

标签: c++ g++ compiler-warnings

当我意识到我忘记了函数中的return语句时,我注意到了这一点,但我仍然按预期获得了值。所以我尝试在一个简单的程序中重新创建这种情况,并且做了同样的事情 - 返回了没有显式return语句的期望值。

我已经注意到,如果我将printf格式说明符类型从<field name="text_en" type="text_general" indexed="true" stored="true"/> 更改为f,它就无法正常工作。或者,如果我创建一个名为d的变量,但是返回类型的多个变量会导致返回定义的最后一个变量。

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

我的结论是否正确,这个设计决定背后的原因是什么?

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;                                                                   
} 

带-Wall标志的编译器输出

g++ test.cpp -o test

1 个答案:

答案 0 :(得分:3)

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

修复使用类似

的内容
float pi() {                                                                
    return 3.1415f;
}

或像

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