缺少返回值语句¶
ID: cpp/missing-return
Kind: problem
Security severity:
Severity: error
Precision: high
Tags:
- reliability
- readability
- language-features
- external/jsf
Query suites:
- cpp-security-and-quality.qls
此规则查找非 void 函数,其执行路径没有通过显式的 return 语句返回。在这种情况下,返回值是未定义的。例如,在 x86 的 cdecl
调用约定中,如果函数的返回值类型不是浮点数,并且可以放入机器字长中,则返回值将是函数返回时 AX/EAX 寄存器中的值。
警告:此检查是近似值,因此某些结果可能不是程序中的实际缺陷。通常,在没有使用所有可能的输入数据运行程序的情况下,无法计算条件语句(如“if”)的实际分支。这意味着无法确定特定语句是否会执行。
建议¶
确保函数中的所有执行路径都通过显式的 return 语句退出。
示例¶
int f() {
...
if (error) {
return -1;
}
...
//wrong: no explicit return here, value returned is undefined
}
参考¶
AV 规则 114,联合攻击战斗机空车 C++ 编码标准。洛克希德·马丁公司,2005 年。
MISRA C++ 规则 8-4-3,关键系统中 C++ 语言使用指南。汽车工业软件可靠性协会,2008 年。
MSDN 库:return 语句 (C++).