Trigraphs

De brontekenset van C-bronprogramma's bevindt zich in de 7-bits ASCII-tekenset, maar is een superset van de ISO 646-1983 Invariant-codeset. Met Trigraph-reeksen kunnen C-programma's worden geschreven met behulp van alleen de ISO -codeset (International Standards Organization). Trigraphs zijn reeksen van drie tekens (geïntroduceerd door twee opeenvolgende vraagtekens) die de compiler vervangt door de bijbehorende interpunctietekens. U kunt trigraphs in C-bronbestanden gebruiken met een tekenset die geen handige grafische weergaven voor bepaalde leestekens bevat.

Met C++17 worden trigraphs uit de taal verwijderd. Implementaties kunnen trigraphs blijven ondersteunen als onderdeel van de door de implementatie gedefinieerde toewijzing van het fysieke bronbestand aan de basisbrontekenset, hoewel de standaard implementaties aanmoedigt dit niet te doen. Via C++14 worden trigraphs ondersteund zoals in C.

Visual C++ blijft ondersteuning bieden voor het vervangen van trigraphs, maar deze is standaard uitgeschakeld. Zie (Trigraphs Substitute) voor meer informatie over het inschakelen van trigraph-vervanging/Zc:trigraphs.

In de volgende tabel ziet u de negen trigraphreeksen. Alle exemplaren in een bronbestand van de interpunctietekens in de eerste kolom worden vervangen door het bijbehorende teken in de tweede kolom.

Trigraph Sequences

Trigraph Interpunctieteken
??= #
??( [
??/ \
??) ]
??' ^
??< {
??! |
??> }
??- ~

Een trigraph wordt altijd behandeld als één bronteken. De vertaling van trigraphs vindt plaats in de eerste vertaalfase, vóór de herkenning van escapetekens in letterlijke tekenreeksen en tekenconstanten. Alleen de negen trigrafen die in de bovenstaande tabel worden weergegeven, worden herkend. Alle andere tekenreeksen worden niet-vertaald.

De escapereeks voor tekens, \?voorkomt de onjuiste interpretatie van trigraph-achtige tekenreeksen. (Zie Escape Sequences voor informatie over escapereeksen.) Als u bijvoorbeeld probeert de tekenreeks What??! af te drukken met deze printf instructie

printf( "What??!\n" );

de tekenreeks die wordt afgedrukt, is What| een ??! trigraph-reeks die wordt vervangen door het | teken. Schrijf de instructie als volgt om de tekenreeks correct af te drukken:

printf( "What?\?!\n" );

In deze printf instructie voorkomt een backslash-escapeteken vóór het tweede vraagteken de onjuiste interpretatie van ??! als een trigraph.

Zie ook

/Zc:trigraphs (Trigraphs Substitute)
C-id's