Trigraf (C-språk)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 28 februari 2021; kontroller kräver 2 redigeringar .

En trigraf (i C-familjen av språk ) ( eng.  trigraph ) är en sekvens av tre tecken, varav de två första är frågetecken (" ??"), och den tredje anger betydelsen av trigrafen. Trigrafer bearbetas av C/C++-förprocessorn .

Trigraftabell

trigraf Motsvarande symbol
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~

Kombinationen av tre frågetecken (" ???") är inte en trigraf.

I verkligheten används trigrafer praktiskt taget inte. Vissa kompilatorer (som gcc ) utfärdar till och med en varning när de hanterar trigrafer.

Historik

Anledningen till uppkomsten av trigrafer är att den sjubitars kodsidan ISO/IEC 646 , antagen 1972 och baserad på ASCII , tilldelade teckenpositioner " #$@[\]^`{|}~" till nationella tecken ( tilläggsbokstäver och valutasymboler ). { a[i]='\n'; }Till exempel kunde tyskarna se koden som ä aÄiÜ='Ön'; ü. För att ersätta de saknade fästena infördes trigrafer.

I Pascal används digrafer för samma syfte : (. .) (* *)istället för [] {}.

Trigrafer har föråldrats i C++17 - standarden [1] [2] .

Exempel på oväntat beteende

Följande är exempel på hur trigrafen " ??/" ersatts med symbolen " \". Tecknet " \" är ett flykttecken för nyradstecknet .

// Kommer nästa rad att köras????????????????????/ a ++ ;

Efter att ha ersatt " ??/" med " \" kommer koden a++;på den andra raden att betraktas som en fortsättning på kommentaren som startade på den första raden.

/??/ * En kommentar *??/ /

Efter att ha ersatt " ??/" med " \" kommer den angivna koden att motsvara koden

/* En kommentar */

Programexempel

??= inkluderar < stdio . h > /* # */ int main ( void ) ??< /* { */ charn ?? _ ( 5 ?? ); /* [ och ] */ n ?? ( 4 ?? ) = '0' - ( ?? -0 ?? ' 1 ??! 2 ); /* ~, ^ och | */ printf ( "%c??/n" , n ?? ( 4 ?? )); /* ??/ = \ */ returnera 0 ; ??>

Se även

Anteckningar

  1. " Ta bort trigrafer??! Arkiverad 9 juli 2018 på Wayback Machine ”, N3981, Richard Smith, 2014-05-06; [1] Arkiverad 8 september 2017 på Wayback Machine
  2. OpenNews: C++17-standard godkänd . opennet.ru Hämtad 7 september 2017. Arkiverad från originalet 8 september 2017.