为什么标识符的前31个字符必须是唯一的?

时间:2013-11-11 12:05:11

标签: c misra

MISRA 2004规则5.1规定所有标识符必须具有唯一的前31个字符。这条规则的原因是什么?某些编译器是技术限制吗?

1 个答案:

答案 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 的例子