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

在宏的参数列表中不应使用预编译指令

3.4.6 ID_directiveInMacroArgument
目录 › next › previous

如果预编译指令出现在宏的参数列表中,会导致标准未定义的行为。

示例:

#define PRINT(s) printf(#s)

PRINT(
#ifdef MAC      // Non-compliant, undefined behavior
    rabbit
#else           // Non-compliant
    hamster
#endif          // Non-compliant
);

可能会打印出 hamster,也可能是 #ifdef MAC rabbit #else hamster #endif 这种怪异的结果。

依据

ISO/IEC 9899:1999 6.10.3(11)-undefined ISO/IEC 9899:2011 6.10.3(11)-undefined ISO/IEC 14882:2003 16.3(10)-undefined ISO/IEC 14882:2011 16.3(11)-undefined

参考

MISRA C 2012 20.6 MISRA C++ 2008 16-0-5
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.