ANSI C Frage zu switch



  • Habe eine Grundsatzfrage, die im Seminar der Info-Vorlesung beim Aufstellen eines Synatxdiagramms für die switch-Anweisung in ANSI C aufgetreten ist.

    Also, bei ansi.org etc. habe ich nichts dazu gefunden, hat jemand einen Link, wo steht, wie switch() in ANSI C erklärt ist?

    Es geht darum: kann man auch KEINE case's und kein default, also switch(term){} schreiben oder muss mind. ein case vorhanden sein. Ich brauche einen Beleg dafür, also etwas, wo steht, wie das genau in ANSI C vereinbart ist. Keine case's wäre zwar trivial, aber das steht hier außer Frage.

    Jetzt bitte nicht mit irgendeinem Compiler probieren, das kann ich auch. Ich bräuchte eine ANSI-Seite, wo das definiert ist, irgend etwas Handfestes...

    Schöne neue Woche wünsche ich Euch!



  • Hab fix raus gefunden, dass ANSI C im "ANSI X3.159-1989" standardisiert wurde. Kann jemand sagen, wo ich dazu etwas finden kann?!



  • Das ist nicht aktuell, Du brauchst C99, dessen Norm Du zum Preis von etwa 20$ kaufen kannst. Nicht ganz offiziell, aber für solche Zwecke nah genug dran sollte der Final Draft sein (-> google). 'Syntax+C' hat mich übrigens zu http://eic.sourceforge.net/iso_c.html gebracht. Vielleicht hilft's.



  • Ich hab gerade mal in C99 nachgeschaut, und nichts gefunden, was dagegen spricht, einfach keine Labels zu verwenden. Dort findet sich nur:
    - Es gibt maximal ein default-label
    - Je 2 case-labels haben (nach der Auswertung) unterschiedlichen Wert.
    (Nachzulesen in Absatz 6.8.4.2)



  • Ich hab's jetzt auch gefunden unter:
    http://std.dkuug.dk/JTC1/SC22/WG14/www/docs/n843.htm

    Stimmt alles so weit und es ist nicht näher spezifiziert, ob nicht auch kein case vorhanden sein kann.
    Möglich, dass dies dann implementationsabhängig ist?! Oder bedeutet das Nicht-Vorhandensein dieser Rule einfach, dass case komplett optional ist?

    Schönen Abend...



  • IMHO geht aus dem Standard eindeutig hervor, dass jegliche case- oder default-Labels optional sind.



  • @Bashar: also ich habe mir die entsprechende Sektion unter obigem Link durch gelesen, aber nichts von optional gesehen (außer ich hab es nicht richtig übersetzt). Da steht nur, dass höchstens ein default da sein darf, auf die Menge der case's wird nicht weiter eingegangen, nur dass es nicht mehr als 1023 sein dürfen...



  • Da steht aber auch nicht, dass case-Labels vorkommen müssen.

    Syntax ist: switch ( ausdruck ) anweisung. Weiterhin ist beschrieben, wie case-Labels in der Anweisung behandelt werden. Auch was passiert, wenn es kein passendes case-Label gibt. Da das den Fall, dass überhaupt kein case-Label vorkommt, abdeckt, müsste schon irgendwo explizit stehen, dass mindestens ein case vorhanden sein muss.



  • Oder bedeutet das Nicht-Vorhandensein dieser Rule einfach, dass case komplett optional ist?

    Ich würde mal sagen, dass das Verhalten dann nicht definiert ist.

    Und sowieso seh ich nicht ein wieso man das definieren sollte da es von forn herein quatch ist.



  • Der Standard definiert das Verhalten in dem Fall aber eindeutig. Wenn kein passendes case-Label existiert, wird die Abarbeitung nach der switch-Anweisung fortgesetzt.


Anmelden zum Antworten