Zum Inhalt springen

Digraph (Informatik)

aus Wikipedia, der freien Enzyklopädie

Als Digraph bezeichnet man in der Informatik eine Kombination aus zwei Zeichen, welche als Ersatz für ein einzelnes Zeichen stehen, welches nicht im verwendeten Zeichensatz zur Verfügung steht. Verschiedene Programmiersprachen machen hiervon Gebrauch.

Digraphen in Pascal

Digraph ersetztes Zeichen Verwendung
(* { Beginn eines Kommentars
*) } Ende eines Kommentars
(. [ Öffnende Klammer für Feldindex
.) ] Schließende Klammer für Feldindex

Bei vielen Compilern wird (* und *) jedoch nicht als Digraph interpretiert, sondern sie kennzeichnen einen eigenen Kommentarblock-Stil. Ein Kommentar, der durch (* begonnen wird, kann somit nicht mit } beendet werden und umgekehrt.

Digraphen in C und C++

Digraph ersetztes Zeichen Verwendung
<: [ Öffnende Klammer für Feldindex
:> ] Schließende Klammer für Feldindex
<% { Öffnende Blockklammer
%> } Schließende Blockklammer
%: # Kennzeichen für Präprozessoranweisungen

<ref name="BSI" /><ref>

{{#if:|{{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}| |}}}}{{#if:|{{{autor}}}: }}{{#if:|{{#if:Rationale für C99, Revision 5.10|[{{#invoke:Vorlage:Internetquelle|archivURL|1={{#invoke:URLutil|getNormalized|1={{{archiv-url}}}}}}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel=Rationale für C99, Revision 5.10}}]{{#if:PDF; 898 kB| (PDF; 898 kB)}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}|{{#if:https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf%7C{{#if:{{#invoke:TemplUtl%7Cfaculty%7C}}%7C{{#invoke:Vorlage:Internetquelle%7CTitelFormat%7Ctitel={{#invoke:WLink%7CgetEscapedTitle%7C1=Rationale für C99, Revision 5.10}}}}|[{{#invoke:URLutil|getNormalized|1=https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf}} {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{#invoke:WLink|getEscapedTitle|1=Rationale für C99, Revision 5.10}}}}]}}{{#if:PDF; 898 kB| (PDF; 898 kB{{#if:{{#if: 2010-10-17 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
          | )
          | {{#if:{{#ifeq:en|de||{{#if:en|1}}}}Kapitel 5.2.1.1| ; 
              | )}}}}}}{{#if:| {{{titelerg}}}{{#invoke:Vorlage:Internetquelle|Endpunkt|titel={{{titelerg}}}}}}}}}}}{{#if:https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf%7C{{#if:{{#invoke:URLutil%7CisResourceURL%7C1=https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf}}%7C%7C}}}}{{#if:Rationale für C99, Revision 5.10|{{#if:{{#invoke:WLink|isValidLinktext|1=Rationale für C99, Revision 5.10|lines=0}}||}}}}{{#if: | In: {{#invoke:Vorlage:Internetquelle|TitelFormat|titel={{{werk}}}}}}}{{#if: | {{{hrsg}}}{{#if: |,|{{#if: 2010-10-17 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: | {{#if:{{#invoke:DateTime|format|{{{datum}}}|noerror=1}}
            |{{#invoke:DateTime|format|{{{datum}}}|T._Monat JJJJ}}
            |{{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, datum={{{datum}}}|class=Zitationswartung}} }}{{#if: |,|{{#if: 2010-10-17 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: | S. {{{seiten}}}{{#if: |,|{{#if: 2010-10-17 | {{#if:{{#invoke:TemplUtl|faculty|}}|;|,}}}}}}}}{{#if: {{#invoke:TemplUtl|faculty|}}| {{#if:|{{#if:|archiviert|ehemals}}|{{#if:|Archiviert|Ehemals}}}} {{#if:|vom|im}} Vorlage:Referrer{{#if:{{#invoke:TemplUtl|faculty|}}| (nicht mehr online verfügbar)}}{{#if: | am {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}|{{{archiv-datum}}}{{#if:286988||(?)}}}}}}{{#if: 2010-10-17|;}}}}{{#if: 2010-10-17| {{#if:{{#invoke:TemplUtl|faculty|}}|abgerufen|Abgerufen}} {{#switch: {{#invoke:Str|len| {{#invoke:DateTime|format| 2010-10-17 |ISO|noerror=1}} }}
       |4=im Jahr
       |7=im
       |10=am
       |#default={{#invoke:TemplUtl|failure|1=Fehler bei Vorlage:Internetquelle, abruf=2010-10-17|class=Zitationswartung}} }} {{#invoke:DateTime|format|2010-10-17|T._Monat JJJJ}}
    | {{#invoke:TemplUtl|failure|1=Vorlage:Internetquelle | abruf=2026-MM-TT ist Pflichtparameter}} }}{{#if:{{#ifeq:en|de||{{#if:en|1}}}}Kapitel 5.2.1.1|{{#if:{{#if: 2010-10-17 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}}}}
       |  (
       | {{#if:PDF; 898 kB | |  (}}
       }}{{#ifeq:{{#if:en|en|de}}|de||
          {{#invoke:Multilingual|format|en|slang=!|split=[%s,]+|shift=m|separator=, }}}}{{#if: Kapitel 5.2.1.1|{{#ifeq:{{#if:en|en|de}}|de||, }}Kapitel 5.2.1.1}})}}{{#if: {{#if: 2010-10-17 | {{#if:{{#invoke:TemplUtl|faculty|}}||1}} }}enKapitel 5.2.1.1|{{#if: |: {{
 #if: 
 | {{
     #ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
     | Vorlage:Str trim
     | {{#invoke:Vorlage:lang|flat}}
     }}
 | {{#ifeq: {{#if:{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|{{#if: {{#invoke:templutl|faculty|}}|de-ch|de}}|de}} | de
     | „Vorlage:Str trim“
     | {{#invoke:Text|quote
         |1={{#if: 
              | {{#invoke:Vorlage:lang|flat}}
              | {{#invoke:Vorlage:lang|flat}} }}
         |2={{#if: {{#invoke:TemplUtl|faculty|}}|de-CH|de}}
         |3=1}} }}

}}{{#if:

   |  (<templatestyles src="Person/styles.css" />{{#if:  | :  }}{{#if:  | , deutsch: „“ }})
   | {{#if: 
       |  ({{#if:  | , deutsch: „“ }})
       | {{#if:  |  (deutsch: „“) }}
 }}

}}{{#if: {{{zitat}}}

   | {{#if: 
       | {{#if: {{{zitat}}}
           | Vorlage:": Text= und 1= gleichzeitig, bzw. Pipe zu viel }} }}
   | Vorlage:": Text= fehlt }}{{#if:  | {{#if: {{#invoke:Text|unstrip|{{{ref}}}}}
             | Vorlage:": Ungültiger Wert: ref=
             | {{{ref}}} }}

}}|.{{#if:{{#invoke:TemplUtl|faculty|}}|{{#if:||{{#ifeq: | JaKeinHinweis |{{#switch:

   |0|=Vorlage:Toter Link/Core{{#if: https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
       | {{#if:  | [1] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 
           | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }}
         }}
       |   (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.)
     }}{{#switch: 
         |no|0|=
         |#default={{#if:  ||  }}
    }}{{#invoke:TemplatePar|check
         |opt      = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
    }}{{#if: https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
      | {{#if:{{#invoke:URLutil|isWebURL|https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf}}
          || {{#if:  ||  }} 
        }}
      | {{#if: 
           | {{#if:  ||  }}
           | {{#if:  ||  }}
        }}
    }}{{#if: 
       | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
         }}
    }}{{#switch: deadurl
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. )  {{#if: 
            | {{#if: deadurlausgeblendet | | Vorlage:Toter Link/archivebot }}
         }}Vorlage:Toter Link/Core{{#switch: 
          |no|0|=
          |#default= {{#if:  ||  }}
        }}{{#invoke:TemplatePar|check
         |all      = inline= url=
         |opt      = datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
       }}{{#if: https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
       | {{#if:{{#invoke:URLutil|isWebURL|https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf}}
          || {{#if:  ||  }} 
        }}
    }}{{#if: 
         | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
           }}
    }}{{#switch: deadurl
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}[https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf }}|{{#switch: 
   |0|=Vorlage:Toter Link/Core{{#if: https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
       | {{#if:  | [2] }} (Seite {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. Suche im Internet Archive ){{#if: 
           | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}
       |   (Seite {{#switch:|no|0|=|#default=dauerhaft }}nicht mehr abrufbar{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}.)
     }}{{#switch: 
         |no|0|=
         |#default={{#if:  ||  }}
    }}{{#invoke:TemplatePar|check
         |opt      = inline= url= text= datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
    }}{{#if: https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
      | {{#if:{{#invoke:URLutil|isWebURL|https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf}}
          || {{#if:  ||  }} 
        }}
      | {{#if: 
           | {{#if:  ||  }}
           | {{#if:  ||  }}
        }}
    }}{{#if: 
       | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
         }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}|#default= https://wiki-de.moshellshocker.dns64.de/index.php?title=Wikipedia:Defekte_Weblinks&dwl=https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf Die nachstehende Seite ist {{#switch:|no|0|=|dauerhaft }}nicht mehr abrufbar]{{#if:  | , festgestellt im {{#invoke:DateTime|format||F Y}} }}. (Suche im Internet Archive. )  {{#if: 
            | {{#if:  | | Vorlage:Toter Link/archivebot }}
         }}Vorlage:Toter Link/Core{{#switch: 
          |no|0|=
          |#default= {{#if:  ||  }}
        }}{{#invoke:TemplatePar|check
         |all      = inline= url=
         |opt      = datum= date= archivebot= bot= botlauf= fix-attempted= checked=
         |cat      = Wikipedia:Vorlagenfehler/Vorlage:Toter Link
         |errNS    = 0
         |template = Vorlage:Toter Link
         |format   = 
         |preview  = 1
       }}{{#if: https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
       | {{#if:{{#invoke:URLutil|isWebURL|https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf}}
          || {{#if:  ||  }} 
        }}
    }}{{#if: 
         | {{#if:{{#invoke:DateTime|format||F Y|noerror=1}}
             || {{#if:  ||  }} 
           }}
    }}{{#switch: 
         |checked|deadurl|= 
         |#default=  {{#if:  ||  }}
    }}[https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf }} }}}}}}}}}}{{#if:|
        {{#invoke:Vorlage:Internetquelle|archivBot|stamp={{{archiv-bot}}}|text={{#if:|Vorlage:Webarchiv/archiv-bot}}

}}}}{{#invoke:TemplatePar|check |all= url= titel= |opt= autor= hrsg= format= sprache= titelerg= werk= seiten= datum= abruf= zugriff= abruf-verborgen= archiv-url= archiv-datum= archiv-bot= kommentar= zitat= AT= CH= offline= |cat= {{#ifeq: 0 | 0 | Wikipedia:Vorlagenfehler/Vorlage:Internetquelle}} |template= Vorlage:Internetquelle |format=0 |preview=1 }}</ref>

Die Verwendung von Digraphen (wie auch von Trigraphen) gilt heutzutage als überholt, da inzwischen auf nahezu allen Plattformen der komplette ASCII-Zeichensatz unterstützt wird.

Da die Digraphen jedoch noch immer in der Sprache definiert sind, kann dies zu subtilen und bisweilen schwer zu findenden Fehlern führen, welche jedoch von aktuellen Compilern angezeigt werden.

Beispiel: <syntaxhighlight lang="cpp"> std::vector<::std::size_t> v; </syntaxhighlight>

Dies lässt sich lösen, indem ein Leerzeichen eingefügt wird: <syntaxhighlight lang="cpp"> std::vector<␣::std::size_t> v; </syntaxhighlight>

Seit C++11 ist dieses Leerzeichen nicht mehr nötig. Die Syntaxdefinition wurde entsprechend angepasst, dass o. g. Code auch ohne Leerzeichen korrekt geparst wird.<ref>en.cppreference.com</ref>

Mit dem Makro <syntaxhighlight lang="cpp">

  1. define PROC_CAT(l, r) l ## r

</syntaxhighlight> lassen sich alle Digraphen zusammenfügen zu den entsprechenden Zeichen, nur die Raute nicht: <syntaxhighlight lang="cpp"> PROC_CAT(<, :) //Wird zu "{" PROC_CAT(new int <, :10:>) //Wird zu new int [10] PROC_CAT(%, :) define NOT_POSSIBLE //Erzeugt Fehler "stray '%:' in program </syntaxhighlight>

Einzelnachweise

<references> <ref name="BSI"> {{#invoke:Vorlage:Literatur|f}} </ref> </references>