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