C语言 如何使用简单的转义序列对东欧(波兰语)符号进行编码



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

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

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

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

不清楚您使用的是哪个 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', ... , ''};

最新更新