Trigraphs
Zdroj znakové sady zdrojových programů jazyka C je obsažen v 7bitové znakové sadě ASCII, ale je nadmnožinou invariantní znakové sady standardu ISO 646-1983.Sekvence trigrafů umožňuje, aby programy jazyka C byly zapsány pomocí pouze invariantní znakové sady standardu ISO (International Standards Organization).Trigrafy jsou sekvence tří znaků (uvedené dvěmi po sobě jdoucími otazníky), které kompilátor nahradí jejich odpovídajícími znaky interpunkce.Trigrafy lze použít ve zdrojových souborech jazyka C, které používají znakovou sadu, která neobsahuje vhodné grafické reprezentace pro některá interpunkční znaménka.
Následující tabulka obsahuje devět sekvencí trigrafů.Všechny výskyty znaků interpunkce v prvním sloupci ve zdrojovém souboru jsou nahrazeny odpovídajícím znakem ve druhém sloupci.
Sekvence trigraf
Trigraf |
Znak interpunkce |
---|---|
??= |
# |
??( |
[ |
??/ |
\ |
??) |
] |
??' |
^ |
??< |
{ |
??! |
| |
??> |
} |
??- |
~ |
Trigraf je vždy považován za jediný zdrojový znak.Překlad trigrafů probíhá v první fázi překladu, před rozpoznáním řídících znaků v řetězcových literálech a znakových konstantách.V tabulce výše je rozpoznáno pouze devět trigrafů.Všechny ostatní sekvence znaků zůstanou nepřeložené.
Řídící sekvence znaku, \?, zabraňuje ve špatné interpretaci sekvencí znaků podobných trigrafům. (Další informace o řídících sekvencích naleznete v tématu Řídící sekvence.) Například, pokud se pokusíte vytisknout řetězec What??! pomocí tohoto příkazu printf
printf( "What??!\n" );
vytiskne se řetězec What|, protože ??! je sekvence trigrafu, která je nahrazena |znakem.Chcete-li tento řetězec vytisknout správně, napište příkaz takto:
printf( "What?\?!\n" );
V tomto příkazu printf řídící znak zpětného lomítka před druhým otazníkem zabraňuje špatnému vyhodnocení ??! jako trigrafu.