Почему компилятор MSVC конвертирует «?? -«? последовательность «~» в строковых литералах?

у меня есть жестко закодированная строка в моем коде (который должен использоваться в качестве маски файла), но компилятор всегда меняет последовательность «?? -» на «~», например:

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 отображает неверное значение с тильдами на всплывающей подсказке.

2

Решение

Это триграф, способ выразить символы, которые не всегда доступны на клавиатурах.

Это поведение контролируется / Zc: триграфы опция, которая по умолчанию отключена. Похоже, что он включен для вашего проекта, я бы посоветовал вам отключить его.

3

Другие решения

Это называется триграф. Они заменены препроцессором.

2

По вопросам рекламы [email protected]