为什么MISRA规则禁止在程序中使用#undef
?如果我想限制任何宏的范围,如何在不使用#undef
的情况下做到这一点?
最佳答案
基本上,因为 MISRA 过于偏执并且不相信程序员知道他们在做什么 :-) 说真的,MISRA 试图防止某些错误,并且相信如果您禁止可能有问题的代码构造,软件的可靠性会突然增加.这是否属实是一个有争议的问题。在 #undef
的情况下,可能的原因是一旦定义了宏,它的扩展就会保持不变,并且始终是其定义的扩展。如果您允许 #undef
,则标识符可以作为变量、函数名、typedef 或 struct/union 成员重用,甚至可以作为具有不同扩展的宏。如果您愿意,这是防止标识符阴影的某种方法。很吓人吧?!你决定!
要回答您的第二个问题,如果不能使用 #undef
,则限制宏范围的唯一方法是使用文件结尾,这是结束宏范围的唯一其他标准定义方法。换句话说,您必须将源文件拆分为较小的文件,并且仅在编译需要的特定文件时才定义宏。
关于c - 为什么MISRA规则禁止使用 '#undef'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11665031/