iam*_*ind 15 c c++ return-value compiler-flags language-lawyer
与Java不同,在C/C++中允许使用以下内容:
int* foo ()
{
if(x)
return p;
// what if control reaches here
}
Run Code Online (Sandbox Code Playgroud)
这通常会导致崩溃并且难以调试问题.为什么标准不强制要求非函数的最终回报void?(编译器生成错误return值的错误)
gcc/msvc中是否有任何标志来强制执行此操作?(像-Wunused-result)
Pri*_*ley 12
使用-Wall标志gcc.
warning: control reaches end of non-void function
Run Code Online (Sandbox Code Playgroud)
编辑:或更具体地说-Wreturn-type.
它是不允许的(未定义的行为).但是,该标准在这种情况下不需要诊断.
该标准不需要最后一个语句,return因为这样的代码:
while (true) {
if (condition) return 0;
}
Run Code Online (Sandbox Code Playgroud)
这总是返回0,但是一个愚蠢的编译器看不到它.请注意,该标准并未强制要求使用智能编译器.一个return后声明while块是其中一个愚蠢的编译器将不能够优化了浪费.该标准不希望程序员编写废弃代码只是为了满足一个愚蠢的编译器.
g ++ -Wall非常聪明,可以在我的机器上发出诊断信息.
| 归档时间: |
|
| 查看次数: |
3512 次 |
| 最近记录: |