Trigraf (C-sprog)

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 28. februar 2021; checks kræver 2 redigeringer .

En trigraf (i C-familien af ​​sprog ) ( eng.  trigraph ) er en sekvens af tre tegn, hvoraf de to første er spørgsmålstegn (" ??"), og den tredje angiver betydningen af ​​trigrafen. Trigrafer behandles af C/C++ præprocessoren .

Trigraftabel

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

Kombinationen af ​​tre spørgsmålstegn (" ???") er ikke en trigraf.

I virkeligheden bruges trigrafer praktisk talt ikke. Nogle compilere (såsom gcc ) udsender endda en advarsel, når de håndterer trigrafer.

Historie

Årsagen til fremkomsten af ​​trigrafer er, at syv-bit kodetabel ISO/IEC 646 , der blev vedtaget i 1972 og baseret på ASCII , tildelte tegnpositioner " #$@[\]^`{|}~" til nationale tegn ( supplerende bogstaver og valutasymboler ). { a[i]='\n'; }For eksempel kunne tyskerne se koden som ä aÄiÜ='Ön'; ü. For at erstatte de manglende beslag blev der indført trigrafer.

I Pascal bruges digrafer til samme formål : (. .) (* *)i stedet for [] {}.

Trigrafer er blevet forældet i C++17 - standarden [1] [2] .

Eksempler på uventet adfærd

Følgende er eksempler på brug af trigrafen “ ??/” erstattet af symbolet “ \”. Tegnet " \" er et escape-tegn for linjeskifttegnet .

// Vil den næste linje blive udført????????????????????/ a ++ ;

Efter at have erstattet " ??/" med " \", vil koden a++;i 2. linje blive betragtet som en fortsættelse af kommentaren startet i 1. linje.

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

Efter at have erstattet “ ??/” med “ \”, vil den angivne kode svare til koden

/* En kommentar */

Programeksempel

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

Se også

Noter

  1. " Fjernelse af trigrafer??! Arkiveret 9. juli 2018 på Wayback Machine ”, N3981, Richard Smith, 2014-05-06; [1] Arkiveret 8. september 2017 på Wayback Machine
  2. OpenNews: C++17 standard godkendt . opennet.ru Hentet 7. september 2017. Arkiveret fra originalen 8. september 2017.