3

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

4

2 回答 2

7

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 的例子。当然,由于当时流行的编译器的下限,可能两者都选择了相同的数字,但至少可以说,旧 C99 的示例验证了选择。

于 2013-11-11T12:11:40.590 回答
2

MISRA-C:2004 遵循 C90 标准,仅要求将标识符的前 6 个字符视为不同的字符。您可以阅读 MISRA 文档中的基本原理。

MISRA-C:2004 规则 14:

ISO 标准要求外部标识符在前 6 个字符中是不同的。然而,遵守这种严格且无益的限制被认为是不必要的限制,因为大多数编译器/链接器允许至少 31 个字符的重要性(对于内部标识符)。

所指的 ISO 标准是 ISO 9899:1990 (C90)。该规则的目的是确保您使用的是具有足够重要字符的理智、安全的编译器。

于 2013-11-12T07:46:16.437 回答