Umlaute in Bezeichnern standardkonform?



  • Folgendes Programm übersetzt bei mir VC++ ohne zu meckern:

    #include <stdio.h>
    
    int main(){
    	int tür = 1;
    	printf("%d", tür);
    	getchar();
    	return 0;
    }
    

    Dürfen Variablennamen nur bei VC++ Umlaute (Multibyte) enthalten, oder
    dürfte sich sonst auch kein anderer C89?/C99? konformer Compiler über das 'ü' im
    Bezeicher 'tür' beschweren? Wäre toll, wenn der Standard neuerdings Umlaute
    erlauben würde, dann könnte man C-Quelltexte generell lesbarer gestalten ...



  • Ich bin mir da gerade nicht sicher, aber generell sind Umlaute, usw. im Quelltext eher als Tabu anzusehen. Denn selbst wenn sie unterstützt werden, bereiten sie auf anderen System evtl. Probleme und sind alles andere als abwärtskompatibel...

    Fazit: Nicht nutzen!



  • selbst wenn:

    bezeichner werden doch eig. immer in englischer sprache gehalten, jedenfalls mache ich das immer so und kenne sonst keinen quellcode (ausser natürlich beispiele in büchern), in dem bezeichner in deutscher sprache gehalten sind.
    das ein oder andere mal bin ich schon auf, ich glaube es war spanisch, gestoßen, aber ich finde so etwas sinnlos. imo sollte man da schon international denken, schon aus prinzip (z.b. sind schlüsselwörter in programmiersprachen ja auch in englisch). andersprachige bezeichner finde ich da ein no-go, selbst wenn man den quellcode niemandem zeigen möchte.



  • Schau mal in die Linkliste für Neulinge
    Da stehen Links zu den Drafts von C99 und C11. Da kannst du mal in die Anhänge D schauen.

    Sieht etwa so aus:

    C11-Standard schrieb:

    Universal character names for identifiers
    1 This clause lists the hexadecimal code values that are valid in universal character names
    in identifiers.
    D.1 Ranges of characters allowed
    `1 00A8, 00AA, 00AD, 00AF, 00B2−00B5, 00B7−00BA, 00BC−00BE, 00C0−00D6,

    00D8−00F6, 00F8−00FF

    2 0100−167F, 1681−180D, 180F−1FFF

    3 200B−200D, 202A−202E, 203F−2040, 2054, 2060−206F

    4 2070−218F, 2460−24FF, 2776−2793, 2C00−2DFF, 2E80−2FFF

    5 3004−3007, 3021−302F, 3031−303F

    6 3040−D7FF

    7 F900−FD3D, FD40−FDCF, FDF0−FE44, FE47−FFFD

    8 10000−1FFFD, 20000−2FFFD, 30000−3FFFD, 40000−4FFFD, 50000−5FFFD,

    60000−6FFFD, 70000−7FFFD, 80000−8FFFD, 90000−9FFFD, A0000−AFFFD,

    B0000−BFFFD, C0000−CFFFD, D0000−DFFFD, E0000−EFFFD**D.2 Ranges of characters disallowed initially**1 0300−036F, 1DC0−1DFF, 20D0−20FF, FE20−FE2F

    `

    Da ich die Tabelle gerade nicht im Kopf habe, weiß ich nicht ob das ü dabei ist 😃


  • Mod

    Die Kurzzusammenfassung: Im Prinzip sind alle Zeichen (außer Zeichen mit spezieller Bedeutung) erlaubt, aber ihre Unterstützung wird nicht verlangt. Das heißt, MSVC ist standardkonform, da er das Programm so übersetzen darf, aber ein anderer Compiler kann genau so gut sagen, dass er den Code so nicht annimmt (GCC weigert sich zum Beispiel). Den Mindestzeichensatz (den jeder Compiler unterstützen muss) hat DirkB schon genannt. In lesbarer Form sind das die lateinischen Buchstaben, Ziffern und '_'.


Anmelden zum Antworten