断言中的表达式不应有副作用
10.8.2 ID_sideEffectAssertion
断言中的表达式如果有副作用,不能保证在所有编译设置下都有效。
如标准断言 assert 会受宏 NDEBUG 的影响,当该宏被定义时 assert 中的表达式不会被执行。
示例:
void foo(int* p) {
assert(++(*p) > 0); // Non-compliant
}
表达式的副作用均应在 assert 之前完成:
void foo(int* p) {
++(*p);
assert(*p > 0); // Compliant
}
相关
依据
ISO/IEC 9899:1999 7.2
ISO/IEC 9899:2011 7.2