当我意识到我忘记了函数中的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
答案 0 :(得分:3)
你的函数没有return
语句(这是编译器警告清楚地告诉你的),并且没有像隐含返回的类型或变量这样的东西。你有这个功能的未定义行为,消化它。
修复使用类似
的内容float pi() {
return 3.1415f;
}
或像
这样的简单声明constexpr float pi = 3.1415f;