我正在用C开发一个嵌入式应用程序,它必须符合MISRA标准。它将涉及使用包含波兰标志的字符串(ąęćłńśźż)。我尝试使用八进制/十六进制转义序列对它们进行编码:
dictionary[archive_error] = "B" "\x88" "ąd pamieci";
但规则4.1禁止这些。 MISRA-C 2004.该规则必需。
我的问题是:是否有可能以及如何使用ISO / IEC 9899的简单转义序列对此字符集进行编码?
答案 0 :(得分: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'};