case '0' ... '9':
Кажется, что такой
switch вообще не должен компилироваться.Но в GCC это работает. Это расширение называется case ranges — можно задавать сразу диапазон значений внутри
case.Например:
case '0' ... '9':
return DIGIT;
case 'a' ... 'z':
case 'A' ... 'Z':
return LETTER;
Вместо десяти отдельных
case для цифр и ещё десятков для букв — одна строка на диапазон.Но есть нюанс: это не стандартный C, а расширение GCC. Если код должен быть переносимым между компиляторами, на такой синтаксис лучше не рассчитывать.
Одна из тех возможностей C, которые выглядят неправильно, пока не узнаешь, что компилятор действительно это поддерживает.




