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

宏的实参不应有副作用

3.3.1 ID_macro_sideEffectArgs
目录 › next › previous

当宏参数有“副作用(side effect)”时,如果宏定义中没有或多次引用到该参数,会导致意料之外的错误。

示例:

#define I(a)
#define M(a) ((a) + (a))

int foo(int& a) {
    return M(++a);   // Non-compliant, returns ‘((++a) + (++a))’
}

void bar(int& a) {
    I(a--);          // Non-compliant, does nothing
}

例中 M 和 I 看起来像是函数调用,而展开后的结果却在意料之外。

相关

ID_sideEffectAssertion ID_macro_function

参考

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