2

我的代码中有一个硬编码字符串(应该用作文件掩码),但编译器总是将“??-”序列更改为“~”,例如:

const wchar_t textW[] = L"test-??-??-??.txt";

testW 将是“test-~~??.txt”(不带引号)。

非 unicode 字符串也会发生同样的情况:

const char textA[] = "test-????-??-??.txt";

textA 将是“test-??~~??.txt”(不带引号)。

我的编译器是 Microsoft Visual C++ 2008。

我刚刚用 Visual Studio 2013 尝试过这个,运行时的字符串是正确的,并且当我跟踪应用程序时,智能感知在工具提示上显示正确的值,但是......但是在写作模式下(当应用程序没有运行时)智能感知在工具提示上使用 tildas 显示不正确的值。

4

2 回答 2

3

这是一个trigraph,一种表达键盘上并不总是可用的字符的方式。

此行为由/Zc:trigraphs选项控制,默认情况下该选项是关闭的。它似乎已为您的项目启用,我建议您禁用它。

于 2014-04-15T11:58:46.147 回答
2

它被称为三元组。它们被预处理器取代。

于 2014-04-15T11:58:38.260 回答