作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在用 C 开发一个嵌入式应用程序,它必须符合 MISRA标准。它将涉及使用包含波兰语符号 (ąęćłńśźż) 的字符串。我尝试使用八进制/十六进制转义序列对它们进行编码:
dictionary[archive_error] = "B" "\x88" "ąd pamieci";
但规则 4.1 禁止这些行为。 MISRA-C 2004。此规则是必需的。
我的问题是:是否有可能以及如何仅使用 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。
否则,解决方法是简单地使用与整数混合的字 rune 字,而不是字符串文字:
dictionary[archive_error] = {'B', 0x88u, 'a', ... , '\0'};
关于c - 如何使用简单的转义序列对东欧(波兰)符号进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29602963/
我是一名优秀的程序员,十分优秀!