Array initialisieren mit { 1, 2, }



  • Hallo an alle,

    ich bin in einem Beispiel ueber die Initialisierung
    eines Arrays mit Komma und dann nichts mehr gestolpert.
    Siehe folgendes Beispiel:

    int array_1[4] = { 1, 2 };
       int array_2[4] = { 1, 2, };   // <-- Nach dem Komma kommt nichts mehr
    

    Mein Visual Studio 2010 kompiliert das ohne murren.
    Nun frag ich mich seit wann geht das ? Was ist der Sinn dvaon 😕

    Gruß Ulli



  • Das ist auch standardkonform AFAIR. Der Nutzen ist eher beschränkt, man kann halt leichter copy/pasten und Zeilenumbrüche sehen symmetrisch aus.



  • Das geht auch in der C-Grammatik. Ich vermute bei so was immer, dass die Frage nach dem Sinn der Sache weniger sinnvoll ist als die Frage, wie das zustande gekommen ist. Jetzt musst du, wenn du das sicher wissen willst, das Komitee fragen, aber im Zweifel ist das eine der Stellen, wo stumpf festgeschrieben wurde, was die Compiler ohnehin schon gemacht haben.

    Compiler X erlaubt das. Gibt es einen guten Grund, das zu verbieten? Nein? Standardisiert. Denn ohne Grund sollte der Standard nicht dazu führen, dass große Mengen Code auf einmal nicht mehr kompilieren.


  • Mod

    C99 Rationale schrieb:

    6.7.8
    K&R allows a trailing comma in an initializer at the end of an initializer-list. The Standard has retained this syntax, since it provides flexibility in adding or deleting members from an initializer list, and simplifies machine generation of such lists.

    Link



  • ah, jetzt ist der Ritchie dran Schuld. ich dachte schon, der Stroustrup wär dran Schuld 😉


  • Mod

    dd++ schrieb:

    ah, jetzt ist der Ritchie dran Schuld. ich dachte schon, der Stroustrup wär dran Schuld 😉

    Der hat das bestimmt auch nicht erfunden. Kann hier irgendjemand A oder B? Bei denen ist das sicher auch so. Ist eben ein bisschen einfacher, einen Parser dafür zu schreiben. Da spart man sich eine Regel, die man kontrollieren muss. Dabei hat es keine wesentlichen Nachteile, wenn diese Schreibweise möglich ist.



  • Hallo,

    vielen Dank für die Anmerkungen und Links. Ich dachte schon das ist
    für irgendwelche besonders tricky Techniken sinnvoll.

    Gruß Ulli



  • Wer schon mal Präprozessor-Metaprogrammierung gebraucht hat, weiss solche Syntaxregeln durchaus zu schätzen 🙂


Log in to reply