у меня есть жестко закодированная строка в моем коде (который должен использоваться в качестве маски файла), но компилятор всегда меняет последовательность «?? -» на «~», например:
const wchar_t textW[] = L"test-??-??-??.txt";
TestW будет «test- ~~ ??. Txt» (без кавычек).
То же самое происходит и с не-юникодными строками:
const char textA[] = "test-????-??-??.txt";
textA будет «test — ?? ~~ ??. txt» (без кавычек).
Мой компилятор — Microsoft Visual C ++ 2008.
Я только что попробовал это с Visual Studio 2013, строка во время выполнения является правильной, и intellisense отображает правильное значение во всплывающей подсказке, когда я отслеживаю приложение, но … Но в режиме записи (когда приложение не работает) intellisense отображает неверное значение с тильдами на всплывающей подсказке.
Это триграф, способ выразить символы, которые не всегда доступны на клавиатурах.
Это поведение контролируется / Zc: триграфы опция, которая по умолчанию отключена. Похоже, что он включен для вашего проекта, я бы посоветовал вам отключить его.
Это называется триграф. Они заменены препроцессором.