Visual Studio 2008:字符串文字"??-"、"??'"、"??="损坏

Visual Studio 2008: String Literals "??-", "??'", "??=" corrupt

本文关键字:损坏 字符串 文字 Studio Visual 2008      更新时间:2023-10-16

最近我在Visual Studio 2008中遇到了一个错误(至少我认为它是一个错误)。

当我尝试创建带有两个问号后跟另一个字符的字符串文字时,发生了一些奇怪的事情:这三个字符被另一个字符替换。

例子:

printf("??-"); --> ~  (hyphen)
printf("??'"); --> ^  (circumflex)
printf("??="); --> #  (hash)
printf("??)"); --> ]  (square braket)
printf("??("); --> [  (square braket)
printf("??/"); -->   (backslash)
printf("??!"); --> |  (pipe)
printf("??%"); --> ?? (percent sign disappears)

有人知道这种更换的原因吗?

这不是错误,更多的是历史的宿醉。它们是 C 三元组 - https://msdn.microsoft.com/en-us/library/bt0y4awe.aspx

Di/Tri-graphs是一种表示字符的方法,这些字符在语言开发时不容易获得。它们允许您在源代码中输入您可能没有键盘键表示的符号。

Tri-graph Symbol
??=       #
??/       
??'       ^
??(       [
??)       ]
??!       |
??<       {
??>       }
??-       ~
% 问题

只是 printf 中常见的问题,如果您希望看到它,您需要用 % 转义 %。这是因为 % 通常是格式说明符的开头。