👩💻 Switch statement с диапазонами Очередное расширение GNU. Допустим у нас ситуация... с такими условиями: void func(uint32_t var) { if (var >= VALUE_A_START && var <= VALUE_A_END) { /* CODE */} else if (var >= VALUE_B_START && var <= VALUE_B_END) { /* CODE */} else if (var >= VALUE_C_START && var <= VALUE_C_END) { /* CODE */} else if (var >= VALUE_D_START && var <= VALUE_D_END) { /* CODE */} else { /* CODE */} } В зависимости от попадания в нужный диапазон выполняется то или иное действие. Попробуем переписать при помощи switch: void func(uint32_t var) { switch (var) { case VALUE_A_START: case VALUE_A_1: case VALUE_A_2: // ... здесь куча других case case VALUE_A_30: case VALUE_A_31: case VALUE_A_END: /* CODE */ break; // Остальные секции: D, C, D ... default: break; } } Выглядит как-то не красиво и это не кажется. Если у нас будет очень большой диапазон проверяемых значений, код станет совсем нечитаем. Попробуем использовать расширения GNU и переписать код в более удобном д