事实证明,如果你在非空函数中没有return语句,g ++编译器(默认情况下在Qt Creator中使用)只会发出警告,即:
int* create_array(int n)
{
int* a = new int[n];
}
编译好。
这种行为受到g ++本身的无数错误报告的影响,但看起来开发人员认为这种行为符合C ++标准(这是有争议的,因为这部分有点令人困惑),如http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43943所述:< / p>
Flowing off the end of a function is equivalent to a return with no value;
this results in undefined behavior in a value-returning function.
然而,同一段开头是:
A return statement without an expression can be used only in functions
that do not return a value, that is, a function with the return type void,
a constructor (12.1), or a destructor (12.4).
除了标准解释上的这些(非)圣战之外,有没有选项让Qt在编译时将其标记为错误?
答案 0 :(得分:1)
这与Qt无关,而与g ++有关。
在构建选项中,只需添加标志-Werror
,g ++会将任何警告视为错误。您可能还需要使用标志-Wall
来使g ++生成其他警告,因为默认情况下它不会为缺少的返回语句(以及许多其他情况)生成警告。然而,没有办法在每个警告的基础上调整此设置,因此无论是一切还是全无。
答案 1 :(得分:1)
您可以使用-Werror=warning_name
语法将特定警告视为错误。对于您的情况,您可以使用-Werror=return-type
(其中return-type
是“控制到达非空函数结束”警告的名称)。根据{{3}}。