'??'在Visual C ++中被转换为'^'。为什么会发生,出路是什么?
-
27-09-2019 - |
题
'??'如果我编译mn VC ++程序并运行它,它将转换为'^'
例如 通用标签
打印出 通用标签
但是,如果我在Turbo C / C ++中运行相同的代码,则不会出现此类问题。为什么在Windows的VC ++上会发生这种情况?
解决方案
尽管
??
与??'
相对应,但单独的 ^
并不是 trigraph 。
也许您在此处键入的代码与您在代码中输入的内容不同,并且您在字符串中看不到尾随的单引号,因为它与结束的引号太近了。
因此在代码中您可能拥有: 通用标签
其他提示
您确定它是双引号而不是单引号吗?如果是??”,则您刚刚遇到了 trigraph ,即“确实应该删除的功能”,但这并不是由于IBM不从EBCDIC迁移到UTF-8 。(当C ++ 0x仍可进行更改时,考虑将三边形删除,但是IBM及其在ISO C ++委员会的代表强烈阻止了删除三边形的动作。)
??
通常以序列开始一个三字母组合,但是序列“ ??”不是三部曲,因此不应该这样解释-也许编译器中有错误-您到底使用的是哪个版本,确切的代码是什么(包括变量声明)?
此代码显示“ ??”您可能会期望在VS 2010的MSVC 6的多个版本中使用: 通用标签
但是将snprintf()
line替换为:
通用标签
,输出将变为“ '^
”(VS 2010中除外)。
一项快速测试显示VS 2010默认情况下禁用三字图支持(在第二个测试中打印出“ '??'
”)。在VS 2010中,必须使用/Zc:trigraphs
选项显式启用三字图支持。很好。
有关什么是三字母组合的详细信息,请参见:在C ++中Trigraph序列的用途是什么?
不隶属于 StackOverflow