Non sarà possibile farlo in C standard con una dichiarazione switch-case
.
(come altre risposte hanno sottolineato, alcuni compilatore hanno estensioni non standard per permettere questo)
Invece, vi consiglio facendo un data-struttura come:
struct RangeData
{
int start;
int end;
void (*func)(int);
};
RangeData ranges[] = { { 1, 10, Handle10s },
{ 20, 30, Handle20s },
{5000, 10000, HandleBigNumbers} };
allora dovrebbe essere molto facile creare un piccolo loop che attraversa, trova l'intervallo corretto e chiama la funzione corretta.
void DoNumber(int value)
{
for(int i=0; i<ARRAYSIZE(ranges); ++i)
{
if (ranges[i].start <= value && value <= ranges[i].end)
{
ranges[i].func(value);
}
}
}
Le tue uniche opzioni sono fare come non vuoi o come suggerisce pzaenger. – Steve
Se si desidera una soluzione non portatile, gcc può utilizzare il caso basato su intervallo. – Boiethios
Intendi '1 ... 10', non' '1' ... '10''. E questo costrutto è un'estensione gcc, non standard C. –