Обычно последовательность ??
запускает триграф, но последовательность "??" не триграф, поэтому его не следует интерпретировать как таковой - может быть, есть ошибка в компиляторе - какую именно версию вы используете и какой код (включая объявления переменных)?
Этот код печатает "??" в нескольких версиях MSVC 6 до VS 2010, как и следовало ожидать:
char ch[20];
sprintf( ch, "??");
printf( "%s\n", ch);
Но замените строку snprintf()
на:
sprintf( ch, "'??'");
и вывод становится "'^
" (кроме VS 2010).
Быстрый тест показывает, что VS 2010 по умолчанию отключает поддержку триграфа (во 2-м тесте выводится «'??'
»). В VS 2010 вы должны явно включить поддержку триграфа, используя опцию /Zc:trigraphs
. Ницца.
Подробнее о том, что такое триграфы, см .: Назначение последовательностей триграфов в C ++?