¿Qué es “…” en switch-case en código C?

2 minutos de lectura

avatar de usuario
jasonz

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 una especie de operador? ¿Por qué “El lenguaje de programación C” no lo menciona?

  • gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/… y lea también ¿Expresión extraña del inicializador?

    –Grijesh Chauhan

    17 de septiembre de 2013 a las 15:14


  • @GrijeshChauhan Las preguntas y las respuestas al dup enumerado no coinciden ni remotamente con esta pregunta. Esta pregunta pregunta cuál es esta función, el dup pregunta cómo convertir esta función. Es una tontería catalogarlo como un dup.

    – Shafik Yaghmour

    18 de septiembre de 2013 a las 9:25


  • @ShafikYaghmour ¿Lo es? De hecho, las respuestas publicadas aquí son diferentes. A través de la pregunta se responde muy bien (y se acepta) y no veo ningún alcance para agregar uno nuevo … Voto por reabrir. ¡Gracias!

    –Grijesh Chauhan

    18 de septiembre de 2013 a las 9:34


  • @ShafikYaghmour Ok, he votado para reabrir, tenemos que esperar hasta que más usuarios voten para reabrir OP o tú o yo tenemos que levantar una bandera para reabrir… no hay otra opción.

    –Grijesh Chauhan

    18 de septiembre de 2013 a las 9:45

avatar de usuario
Shafik Yaghmour

Esto es un gcc extensión llamada rangos de casosasí se explica en el documento:

Puede especificar un rango de valores consecutivos en una sola etiqueta de caso, así:

case low ... high:

Puede encontrar una lista completa de extensiones gcc aquí. Parece que clang también es compatible con esto para tratar de ser compatible con gcc. Utilizando el -pedantic bandera en cualquiera 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 notar que El kernel de Linux usa muchas extensiones gcc una de las extensiones no cubiertas en el artículo son las expresiones de instrucción.

  • Buena respuesta y gran colección de enlaces también. ¡Gracias!

    – Kjellski

    17/09/2013 a las 19:43

  • Preguntas frecuentes/DoWhile0 cubre expresiones de declaración y kernel de Linux.

    – Shafik Yaghmour

    16/10/2013 a las 14:26

es el compilador gcc extensión permitiendo combinar varias declaraciones de casos en una sola línea.

Cuidado, no es C estándar y por lo tanto no es portátil. Es una abreviatura ideada para declaraciones de casos. Está bien definido ya que en C solo puedes activar tipos integrales.

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

caso ‘0’…’7′: es rangos de casos Especificación en gcc.

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

Escriba espacios alrededor de …, de lo contrario, puede analizarse 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]; 

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad