Was ist “…” im Switch-Case im C-Code

Lesezeit: 2 Minuten

Benutzer-Avatar von Jasonz
jasonz

Hier ist ein Stück Code drin /usr/src/linux-3.10.10-1-ARCH/include/linux/printk.h:

static inline int printk_get_level(const char *buffer)
{
  if (buffer[0] == KERN_SOH_ASCII && buffer[1]) {
    switch (buffer[1]) {
    case '0' ... '7':
    case 'd':  /* KERN_DEFAULT */
      return buffer[1];
    }
  }
}

Ist es eine Art Operator? Warum erwähnt “The C Programming Language” es nicht?

  • gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/… und lesen Sie auch Seltsamer Initialisierungsausdruck?

    – Grijesh Chauhan

    17. September 2013 um 15:14 Uhr


  • @GrijeshChauhan Die Fragen und Antworten auf die aufgeführten Dups stimmen nicht einmal im Entferntesten mit dieser Frage überein. Diese Frage fragt, was diese Funktion ist, die dup fragt, wie man von dieser Funktion konvertiert. Es ist dumm, es als Dup aufzulisten.

    – Shafik Yaghmour

    18. September 2013 um 9:25 Uhr


  • @ShafikYaghmour Ist es das? Tatsächlich sind die hier geposteten Antworten unterschiedlich. Die Frage wird gut beantwortet (und akzeptiert) und ich sehe keinen Spielraum, um eine neue hinzuzufügen. Ich stimme für die Wiedereröffnung. Vielen Dank!

    – Grijesh Chauhan

    18. September 2013 um 9:34 Uhr


  • @ShafikYaghmour Ok, ich habe für die Wiedereröffnung gestimmt. Wir müssen warten, bis mehr Benutzer für die Wiedereröffnung stimmen, entweder OP, oder Sie oder ich müssen eine Flagge hissen, um wieder zu öffnen … keine andere Wahl.

    – Grijesh Chauhan

    18. September 2013 um 9:45 Uhr

Benutzeravatar von Shafik Yaghmour
Shafik Yaghmur

Das ist ein gcc Erweiterung namens Fallbereicheso wird es im Dokument erklärt:

Sie können einen Bereich aufeinanderfolgender Werte in einer einzelnen Fallbeschriftung wie folgt angeben:

case low ... high:

Sie finden eine vollständige Liste von gcc-Erweiterungen hier. Wie es scheint clang unterstützt dies ebenfalls zu versuchen und kompatibel zu bleiben gcc. Verwendung der -pedantic Flagge in entweder gcc oder clang wird Sie warnen, dass dies nicht dem Standard entspricht, zum Beispiel:

warning: range expressions in switch statements are non-standard [-Wpedantic]

Es ist interessant, das festzustellen Der Linux-Kernel verwendet viele gcc-Erweiterungen Eine der in diesem Artikel nicht behandelten Erweiterungen sind Anweisungsausdrücke.

  • Schöne Antwort und auch tolle Linksammlung. Vielen Dank!

    – Kjellski

    17. September 2013 um 19:43 Uhr

  • FAQ/DoWhile0 deckt Anweisungsausdrücke und den Linux-Kernel ab.

    – Shafik Yaghmour

    16. Oktober 2013 um 14:26 Uhr

Es ist der gcc-Compiler Verlängerung ermöglicht es, mehrere case-Anweisungen in einer Zeile zu kombinieren.

Achtung, es ist kein Standard-C und daher nicht portabel. Es ist eine Abkürzung für Fallaussagen. Es ist wohldefiniert, da Sie in C nur ganzzahlige Typen einschalten können.

In Standard-C, ... wird nur in Argumentlisten mit variabler Länge verwendet.

Fall ‘0’…’7′: ist Fallbereiche Speziation im gcc.

Bereichsangabe für case-Anweisung.

Schreiben Sie Leerzeichen um das …, da es sonst möglicherweise falsch geparst wird, wenn Sie es mit ganzzahligen Werten verwenden

case '0' or case '1' or case '3' and so on case '7':
or case 'b' :
just return buffer[1]; 

1409580cookie-checkWas ist “…” im Switch-Case im C-Code

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy