Lo que va dentro del switch son unicamente ENTEROS, eso no quiere decir que sean solamente int, puede ser char, short long int, long int.
Lo que si no puede ser son strings "por ejemplo". Pero si una letra como 'a' ya que el codigo ASCII de 'a' es un numero de 8bits.
en XC8, un char ocupa 8 bits, un int 16 bits, por ahi es medio confuso o dificil de recordar esto, ni hablar de short long int, y ademas vas a otro sistema o compilador esta notacion cambia. Ejemplo el compilador CCS para PIC utiliza int como 8 bits. Una PC int es de 32 bits.
Por eso yo me acostumbre a incluir la cabecera <
stdint.h> , la cual permite manejar otros nombres de los tipos de variables. y son:
int8_t
int16_t
int32_t
uint8_t
uint16_t
uint32_t
los que tienen la
u adelante son para aquellas variables sin signo (unsigned), y luego tenes el numero que te dice cuanto ocupa. Entonces... si quisiera una variable de 8 bits sin signo, entonces uso:
#include <stdint.h>
uint8_t nombre_de_varaible;
en ves de unsigned char, Cada compilador tiene su propio stdint.h lo que permite que por mas que pases el codigo a otro compilador siempre tengas el mismo tamaño.
Aca te dejo parte de stdint de XC8:
// Con signo
typedef signed char int8_t; // Con signo y 8 bits ( antes signed char )
typedef signed int int16_t; // Con signo y 16 bits ( antes signed int )
typedef signed short long int int24_t; // Con signo y 24 bits ( antes signed short long int )
typedef signed long int int32_t; // Con signo y 32 bits ( antes signed long int )
// Sin signo
typedef unsigned char uint8_t; // Sin signo y 8 bits ( antes unsigned char )
typedef unsigned int uint16_t; // Sin signo y 16 bits ( antes unsigned int )
typedef unsigned short long int uint24_t; // Sin signo y 24 bits ( antes unsigned short long int )
typedef unsigned long int uint32_t; // Sin signo y 32 bits ( antes unsigned long int )
Observaras que se vuelve mas practico para recordar los nombres y cuanto ocupa cada una.
PD: Hay mas definiciones como aquellas que le agregan el fast y least pero por ahora dejarlas de lado

PD2: Tambien estan definidos en ese archivo los maximos y minimo que pueden almacenar cada tipo, no se por que se repiten alli cuando se tienen estos en limit.h