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

不应忽略重要的返回值

10.6.1 ID_returnValueIgnored
目录 › next › previous

与状态判断、信息获取、资源分配有关的返回值不应被忽略。

示例:

void bar(string& s) {
    s.empty();          // Non-compliant
}

例中 empty 函数返回字符串是否为空,如果忽略返回值会使函数调用失去意义。

C++17 nodiscard 属性表示返回值具有重要意义,标准库中以及由用户标注的具有 nodiscard 属性的返回值不应被忽略,如:

[[nodiscard]] int fun();   // Or use __attribute__((warn_unused_result)) in GCC

int main() {
    fun();           // Non-compliant
    int r = fun();   // Compliant, ‘r’ should be used in subsequent code
    ....
    static_cast<void>(fun());   // Let it go?
}

如果确实不需要使用返回值,可对函数调用表达式进行显式 void 转换,但应给出合理的解释,审计工具不妨通过配置决定是否放过这种情况。

配置

allowVoidCastedDiscard: 是否允许通过 void 转换忽略返回值

依据

ISO/IEC 14882:2003 5.2.9(4) ISO/IEC 14882:2011 5.2.9(6) ISO/IEC 14882:2017 10.6.7

参考

MISRA C 2012 17.7 MISRA C++ 2008 0-1-7 SEI CERT EXP12-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.