Trigraph (jazyky C)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 28. února 2021; kontroly vyžadují 2 úpravy .

Trigraf (v rodině jazyků C ) ( angl.  trigraph ) je posloupnost tří znaků, z nichž první dva jsou otazníky (" ??") a třetí označuje význam trigrafu. Trigrafy jsou zpracovávány preprocesorem C/C++ .

Trigrafní tabulka

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

Kombinace tří otazníků (" ???") není trigraf.

Ve skutečnosti se trigrafy prakticky nepoužívají. Některé kompilátory (například gcc ) dokonce vydávají varování při práci s trigrafy.

Historie

Důvodem pro výskyt trigrafů je to, že sedmibitová kódová stránka ISO/IEC 646 přijatá v roce 1972 a založená na ASCII přiřazovala pozice znaků " #$@[\]^`{|}~" národním znakům ( doplňková písmena a symboly měn ). { a[i]='\n'; }Například Němci mohli vidět kód jako ä aÄiÜ='Ön'; ü. K nahrazení chybějících závorek byly zavedeny trigrafy.

V Pascalu se digrafy používají ke stejnému účelu : (. .) (* *)místo [] {}.

Trigrafy byly ve standardu C++17 zastaralé [1] [2] .

Příklady neočekávaného chování

Následují příklady použití trigrafu „ ??/“ nahrazeného symbolem „ \“. Znak " \" je únikový znak pro znak nového řádku .

// Bude proveden další řádek????????????????????/ a ++ ;

Po nahrazení " ??/" za " \" bude kód a++;na 2. řádku považován za pokračování komentáře zahájeného na 1. řádku.

/??/ * Komentář * ?? / /

Po nahrazení „ ??/“ za „ \“ bude zadaný kód ekvivalentní kódu

/* Komentář */

Příklad programu

??= include < stdio . h > /* # */ int main ( void ) ??< /* { */ zapálit ?? _ ( 5 ?? ); /* [ a ] ​​*/ n ?? ( 4 ?? ) = '0' - ( ?? -0 ?? ' 1 ??! 2 ); /* ~, ^ a | */ printf ( "%c??/n" , n ?? ( 4 ?? )); /* ??/ = \ */ návrat 0 ; ??>

Viz také

Poznámky

  1. " Odstranění trigrafů??! Archivováno 9. července 2018 na Wayback Machine “, N3981, Richard Smith, 2014-05-06; [1] Archivováno 8. září 2017 na Wayback Machine
  2. OpenNews: schválen standard C++17 . opennet.ru Získáno 7. září 2017. Archivováno z originálu 8. září 2017.