switch ( expresión ){
    case valor :
        sentencia ;
        ...
    break;
    ...
    default :
        sentencia ;
        ...
    break;
}

Una sentencia switch consta de una serie de secciones case y, opcionalmente, una sección default.

Cuando se ejecuta una sentencia switch, primero se evalúa la expresión y después, si el resultado está dentro del rango de valores contemplados en la primera sección case, se ejecutarán las sentencias de la misma y se dará por finalizada la sentencia. En caso de no estar el resultado de la expresión en el primer case se pasará a comprobarlo con el segundo case, el tercero,
etc. Y, por último, si existe una sección default y el resultado de la expresión no ha coincidido con ninguna de las secciones case, entonces se ejecutarán las sentencias de la sección default.


MAIN_PROGRAM_CDIV
BEGIN_PROGRAM
    switch (x){
        case 1:
            x=-1;
        break;
        case 2:
            x=-2;
        break;
        case 3:
            x=-3;
        break;
        case 99:
            x=-99;
        break;
        default:
            x=0;
        break;
    }
END_PROGRAM

La sentencia switch de este programa cambiará de signo la variable x si ésta vale 1, 2, 3 o 99; en caso contrario la pondrá a 0.

Rango de valores de una sección case

En una sección case solo se puede especificar un valor.

Una vez ejecutada una de las secciones case de una sentencia switch ya no se ejecutarán más secciones, aunque éstas especifiquen también el resultado de la expresión, por ejemplo, en la siguiente sentencia:

  switch (2+2)
      case 3:
      case 4:
      case 5:
          x=x+1;
      break;
      case 2;
      case 4;
      case 6:
          y=y-1;
      break;
  }

Se ejecutará la sección x=x+1; y después se finalizará la sentencia, no ejecutándose la sección y=y-1; pues, aunque el resultado de la expresión evaluada (4) está contemplado en ella, también lo está en la sección anterior, (ya que 4 está dentro del rango 3..5).

No es necesario ordenar las secciones case según sus valores (de menor a mayor, o de mayor a menor), pero sí es imprescindible que la sección default (en caso de haberla) sea la última sección. No puede haber más que una sección default.

Es posible anidar sentencias switch sin ningún límite, es decir, se pueden poner nuevas sentencias switch dentro de una sección case (y cualquier otro tipo de sentencia).


Ver: Sintaxis