MISRA 2004规则5.1规定所有标识符必须具有唯一的前31个字符。这条规则的原因是什么?某些编译器是技术限制吗?
答案 0 :(得分:5)
C标准仅保证标识符中的一定数量的初始字符是重要的。对于C99,外部标识符为31个字符。即使这是ANSI / IS C的一大步,它只保证外部标识符的6个重要字符...(所以如果你想知道为什么这么多旧的C函数有不可发音的名字,这就是一个原因。)
在实践中,编译器倾向于在标识符中支持更多数量的重要字符(而且IIRC,C标准甚至有一个脚注鼓励这一点),但是MISRA可能想要选择一个已经由当时最保证的“安全”限制最近的C标准,C99,没有规定由C90保证的6的限制,而MISRA 2004则遵循这一限制。
编辑:由于评论中有两次被质疑,让我澄清一下:MISRA 2004不遵循C99,并且没有确凿的证据证明C99标准对MISRA选择的特定限制有贡献31个字符。但是,不的限制来自C90(ISO C),因为C90指定了6个字符的限制。因此,必须接受MISRA在没有任何已知原因的情况下单独选择数字31,或者(在我看来更可能)在此特定决定中遵循C99 的例子。