versiones guia español actualizar c gcc gcc-extensions

c - guia - qgis español



Qué es "..." en la caja del interruptor en el código C (4)

Es la extensión del compilador gcc que permite combinar varias declaraciones de casos en una línea.

Aquí hay un fragmento de código en /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]; } } }

¿Es un tipo de operador? ¿Por qué "The C Programming Language" no lo menciona?


Esta es una extensión de gcc llamada rangos de casos , así es como se explica en el documento:

Puede especificar un rango de valores consecutivos en una sola etiqueta de caso, como esta:

case low ... high:

Puede encontrar una lista completa de extensiones gcc aquí . Parece que clang también es compatible con esto para tratar de mantenerse compatible con gcc . El uso de la bandera -pedantic en gcc o clang le advertirá que esto no es estándar, por ejemplo:

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

Es interesante observar que el kernel de Linux usa muchas extensiones de gcc. Una de las extensiones no tratadas en el artículo son expresiones de enunciados.


Tenga cuidado, no es estándar C y, por lo tanto, no es portátil. Es una forma abreviada de declaraciones de casos. Está bien definido ya que en C solo puede activar tipos integrales.

En el estándar C, ... solo se usa en listas de argumentos de longitud variable.


caso ''0'' ... ''7'': es rango de casos Speciacation en gcc.

Especificación de rango para la declaración de caso.

Escriba espacios alrededor de ..., ya que de lo contrario se puede analizar incorrectamente cuando lo usa con valores enteros

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