Согласно C ++ '03 Standard 2.3 / 1:
Перед выполнением любой другой обработки каждое вхождение одной из следующих последовательностей из трех символов («триграфические последовательности») заменяется одним символом, указанным в таблице 1.
---------------------------------------------------------------------------- | trigraph | replacement | trigraph | replacement | trigraph | replacement | ---------------------------------------------------------------------------- | ??= | # | ??( | [ | ??< | { | | ??/ | \ | ??) | ] | ??> | } | | ??’ | ˆ | ??! | | | ??- | ˜ | ----------------------------------------------------------------------------
В реальной жизни это означает, что код printf( "What??!\n" );
приведет к печати, What|
потому что ??!
это последовательность триграфа, которая заменяется |
символом.
У меня вопрос, зачем использовать триграфы? Есть ли практическая польза от использования триграфов?
UPD : В ответах упоминалось, что на некоторых европейских клавиатурах нет всех знаков препинания, поэтому программисты не из США должны использовать триграфы в повседневной жизни?
UPD2 : в Visual Studio 2010 по умолчанию отключена поддержка триграфа.