Qu’est-ce que “…” dans un boîtier en code C

Voici un morceau de code dans /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]; } } } 

Est-ce une sorte d’opérateur? Pourquoi “The C Programming Language” ne le mentionne pas?

    Ceci est une extension de gcc appelée range de cas , c’est comment cela est expliqué dans le document:

    Vous pouvez spécifier une plage de valeurs consécutives dans une seule étiquette de cas, comme ceci:

     case low ... high: 

    Vous pouvez trouver une liste complète des extensions gcc ici . Il semble que clang supporte également cela pour restr compatible avec gcc . L’utilisation de l’ -pedantic dans gcc ou clang vous avertira que cela n’est pas standard, par exemple:

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

    Il est intéressant de noter que le kernel Linux utilise beaucoup d’extensions gcc, l’ une des extensions non abordées dans cet article étant les expressions de déclaration.

    Il s’agit de l’ extension du compilateur gcc permettant de combiner plusieurs déclarations de cas sur une seule ligne.

    Attention, ce n’est pas la norme C et donc pas portable. C’est un raccourci conçu pour les déclarations de cas. C’est bien défini car en C, vous ne pouvez activer que les types intégraux.

    Dans la norme C, ... n’est utilisé que dans les listes d’arguments de longueur variable.

    case ‘0’ … ‘7’: correspond à la casse Speciacation in gcc.

    Spécification de plage pour la déclaration de cas.

    Ecrire des espaces autour du …, sinon il peut être mal analysé lorsque vous l’utilisez avec des valeurs entières

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