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

断言中的表达式不应有副作用

10.8.2 ID_sideEffectAssertion
目录 › next › previous

断言中的表达式如果有副作用,不能保证在所有编译设置下都有效。

如标准断言 assert 会受宏 NDEBUG 的影响,当该宏被定义时 assert 中的表达式不会被执行。

示例:

void foo(int* p) {
    assert(++(*p) > 0);  // Non-compliant
}

表达式的副作用均应在 assert 之前完成:

void foo(int* p) {
    ++(*p);
    assert(*p > 0);      // Compliant
}

相关

ID_macro_sideEffectArgs ID_unevaluatedSideEffect

依据

ISO/IEC 9899:1999 7.2 ISO/IEC 9899:2011 7.2

参考

SEI CERT PRE31-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.