Visual Studio 2008: строковые литералы «?? -«, «», «=» продажный

Недавно я наткнулся на ошибку в Visual Studio 2008 (по крайней мере, я думаю, что это один).

Когда я пытаюсь создать струнно-литералы с двумя вопросительными знаками, за которыми следует другой символ, происходит нечто странное: эти три символа заменяются другим символом.

Примеры:

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

Кто-нибудь знает причину этой замены?

2

Решение

Это не ошибка, скорее похмелье истории. Это триграфы C — https://msdn.microsoft.com/en-us/library/bt0y4awe.aspx

Ди-триграфы — это способ представления символов, которые не были легко доступны еще при разработке языка. Они позволяют вам вводить символы в ваш исходный код, которые вы, возможно, не имеете клавиши клавиатуры для представления.

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

Проблема% — это просто обычная проблема в printf, где вам нужно экранировать% с%, если вы хотите его увидеть. Это потому, что% обычно является началом спецификатора формата.

4

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

Других решений пока нет …

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