'??'如果我编译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序列的用途是什么?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top