Udostępnij za pośrednictwem


Trigramy

Źródłowy zestaw znaków programów źródłowych języka C jest zawarty w 7-bitowym zestawie znaków ASCII, ale jest nadzbiorem niezmiennego zestawu kodów ISO 646-1983. Sekwencje trójznaków pozwalają programom języka C na zapisywanie tylko przy użyciu niezmiennego zestawu kodów ISO (Międzynarodowej Organizacji Normalizacyjnej). Trójznaki są sekwencjami trzech znaków (rozpoczętymi przez dwa kolejne znaki zapytania), które kompilator zamienia na odpowiadający im znak interpunkcyjny. Możesz używać trójznaków w plikach źródłowych języka C z zestawem znaków, który nie zawiera wygodnych reprezentacji graficznych dla niektórych znaków interpunkcyjnych.

Język C++17 usuwa trygrafy z języka. Implementacje mogą nadal obsługiwać trigrafy w ramach mapowania zdefiniowanego przez implementację z fizycznego pliku źródłowego do podstawowego zestawu znaków źródłowych, chociaż standard zachęca implementacje do tego. Za pośrednictwem języka C++14 trigrafy są obsługiwane tak jak w języku C.

Język Visual C++ nadal obsługuje podstawianie trójgrafów, ale jest domyślnie wyłączony. Aby uzyskać informacje na temat włączania zastępowania trójgrafów, zobacz /Zc:trigraphs (Podstawienie trigrafów).

Poniższa tabela pokazuje dziewięć sekwencji trójznaków. Wszystkie wystąpienia znaków interpunkcyjnych z pierwszej kolumny są zamieniane w pliku źródłowym na odpowiadający znak z drugiej kolumny.

Sekwencje trójznakowe

Trójznak Znak interpunkcyjny
??= #
??( [
??/ \
??) ]
??' ^
??< {
??! |
??> }
??- ~

Trójznak jest zawsze traktowany jako pojedynczy znak źródłowy. Tłumaczenie trigrafów odbywa się w pierwszej fazie tłumaczenia, przed rozpoznawaniem znaków ucieczki w literałach ciągów i stałych znaków. Rozpoznawane jest tylko dziewięć trójznaków pokazanych w powyższej tabeli. Wszystkie inne sekwencje znaków są pozostawiane nieprzetłumaczone.

Sekwencja \?ucieczki znaków , zapobiega błędnej interpretacji sekwencji znaków przypominających trójznak. (Aby uzyskać informacje o sekwencjach ucieczki, zobacz Sekwencje ucieczki. Jeśli na przykład spróbujesz wydrukować ciąg What??! za pomocą tej printf instrukcji

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

drukowany ciąg jest What| spowodowany ??! tym, że jest sekwencją trójznakową, która jest zastępowana znakiem | . Napisz instrukcję w następujący sposób, aby poprawnie wydrukować ciąg:

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

W tej instrukcji printf, znak ucieczki ukośnika odwrotnego przed drugim znakiem zapytania zapobiega błędnej interpretacji ??! jako trójznaku.

Zobacz też

/Zc:trigraphs (Podstawianie trigrafów)
Identyfikatory w języku C