☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

有返回值的函数其所有分枝都应显式返回

8.24 ID_notAllBranchReturn
目录 › next › previous

如果有返回值的函数在某个分枝没有使用 return 语句显式返回,会导致标准未定义的行为。

示例:

int fun() {
    if (condition1) {
        return 1;
    }
    else if (condition2) {
    }                        // Non-compliant, no return value
    else {
        return 3;
    }
}

当条件符合 condition2 时,fun 函数的调用者将得到一个错误的返回值。

例外:

int main() {
    printf("Hi~\n");
}   // Compliant

标准规定未显式返回的 main 函数会返回 0,故 main 函数不受本规则约束。

依据

ISO/IEC 9899:1999 5.1.2.2.3(1) ISO/IEC 9899:1999 6.9.1(12)-undefined ISO/IEC 9899:2011 5.1.2.2.3(1) ISO/IEC 9899:2011 6.9.1(12)-undefined ISO/IEC 14882:2003 3.6.1(5) ISO/IEC 14882:2003 6.6.3(2)-undefined ISO/IEC 14882:2011 3.6.1(5) ISO/IEC 14882:2011 6.6.3(2)-undefined

参考

CWE-394 MISRA C 2004 16.8 MISRA C 2012 17.4 MISRA C++ 2008 8-4-3 SEI CERT MSC52-CPP
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.