5

我正在用 C 语言开发一个嵌入式应用程序,它必须符合MISRA标准。它将涉及使用包含波兰符号 (ąęćłńśźż) 的字符串。我尝试使用八进制/十六进制转义序列对它们进行编码:

dictionary[archive_error] = "B" "\x88" "ąd pamieci";

但这些是规则 4.1 所禁止的。MISRA-C 2004。此规则是必需的。

我的问题是:是否有可能以及如何仅使用 ISO/IEC 9899 的简单转义序列对该字符集进行编码?

4

1 回答 1

3

不清楚您使用的是哪个 MISRA 版本。

MISRA-C:2004 的规则 4.1 简单地禁止非标准转义序列。在 MISRA-C:2004 TC1 中,后来更改为禁止所有十六进制和八进制转义序列(除非您小心,否则它们具有实现定义的行为)。显然,这条规则及其所谓的更正是委员会的一个小玩意。

该规则已在最新的 MISRA-C:2012 中得到适当修复,其中规则 4.1 规定转义序列应终止,无论是新转义序列的开始还是字符串文字的结束,就像在您的示例中一样。

因此,您发布的代码不符合 MISRA-C:2004,但它完全符合 MISRA-C:2012。如果您使用的是前者,我会提出一个偏差并参考 MISRA-C:2012 规则 4.1。

否则,一种解决方法是简单地使用与整数混合的字符文字,而不是字符串文字:

dictionary[archive_error] = {'B', 0x88u, 'a', ... , '\0'};
于 2015-04-13T11:03:19.407 回答