可以说,在许多情况下,X 宏会增加安全性,因为它可以更容易地确保生成的数组的长度相同。
但是,Misra C(来自 2004 参考)规则似乎有很多限制使用的预处理器规则:
规则 19.1(建议)文件中的#include 语句只能在其他预处理器指令或注释之前。
例如,如果源表在包含以生成数组的其他文件中,则很麻烦。但这是建议性规则,因此可以解决。
规则 19.4(必需)C 宏只能扩展为花括号初始值设定项、常量、字符串文字、带括号的表达式、类型限定符、存储类说明符或 do-while-zero 构造。
应该不是问题,因为大多数 X 宏都用于生成数组初始值设定项或常量。
规则 19.6(必需)不得使用#undef。
使某些 X 宏使用模式成为不可能。不幸的是,但并没有完全阻止 X 宏。
规则 19.7(建议) 应优先使用函数而不是类似函数的宏。
仅限咨询规则。
规则 19.12(必需) 在单个宏定义中最多应出现一次 # 或 ## 预处理器运算符。
可以使用嵌套宏来解决。
规则 19.13(建议) 不应使用 # 和 ## 预处理器运算符。
例如,在生成枚举时很麻烦,但这只是建议性规则。
规则 19.15(必需) 应采取预防措施以防止头文件的内容被包含两次。
在某些情况下很麻烦,但可以解决。
看了上面的内容,如果你小心的话,似乎可以将 X-macros 与 Misra C 代码一起使用。
我的结论是正确的,还是我缺少一些规则?