【问题标题】:IAR EW for ARM 8.50 and oddball char array literal behavior in C++ARM 8.50 的 IAR EW 和 C++ 中的古怪字符数组文字行为
【发布时间】:2021-12-08 17:13:31
【问题描述】:

当我声明一个特定的字符串时,我在 ARM 8.50 的 IAR EW 中发生了一些奇怪的常量/文字生成:

const char g_string[]="?????-??";

当我在调试器中查看它时,它实际上是在内存中生成以下内容:

???~??

如果我像这样分解字符串:

const char g_string[]="?????""-??";

我得到了预期/期望的输出:

?????-??

我是否违反了某些已知标准?还是这是一些 IAR 特定的错误?

FWIW,使用 MSVC 和 Xtensa/Clang 生成的文字不需要这种怪异来获得预期的八个字符。

编辑:

const char g_string[]=R"foo(?????-??)foo";似乎在内存中生成了合适的字符,所以可能是字符编码问题?

【问题讨论】:

标签: c++ iar


【解决方案1】:

我发现了我的问题,这对美国程序员来说非常晦涩。

三元组:https://stackoverflow.com/a/1995134/550235

我猜 IAR 默认启用了它们,而我使用的其他编译器没有。

祝你好运在谷歌上搜索“带有 ??? 的字符串文字”

【讨论】:

  • 如果您使用二合字母或三合字母,大多数编译器都会发出警告。您需要检查 IAR 的警告选项。例如在 gcc 中是 -Wtrigraph
  • @phuclv 单词“trigraph”根本没有出现在 IAR 文档中,除了他们的 MISRA 内容,所以似乎没有启用或禁用 trigraphs 或警告的选项.
猜你喜欢
  • 2011-02-25
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 2017-08-07
  • 1970-01-01
  • 2011-10-28
相关资源
最近更新 更多