ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
16 ноября
1553812
il-2 (13.11.2025 09:41, просмотров: 6645)
Хочу опробовать конструкцию на Си для switch / case: 

При написании кода switch / case часто бывают случаи, когда в конце case не нужно ставить break, чтобы выполнялся код следующего case:

switch( var )
{
    case LABEL1: // Выполняем код для LABEL1 и LABEL2
        ....
    case LABEL2:
        ....
        break;
}

Однако компилятор при строгой проверке выдает warning, считая такую конструкцию проявлением забывчивости программиста. Можно конечно подавить предупреждение, но не хотелось бы, т.к. такое предупреждение все-таки полезно. Я тут подумал, и решил сделать такую конструкцию:

#define __no_break(line) no_break_line_##line

#define _no_break(line) __no_break(line)

#define no_break goto _no_break(__LINE__); _no_break(__LINE__):

switch( var )

{

case LABEL1: // Выполняем код для LABEL1 и LABEL2

....

no_break;

case LABEL2:

....

break;

}

Предупреждение изчезает, попробовал всякие комбинации с фигурными скобками и без. Вроде нормально работает.

Что скажете, есть какие-нибудь подводные камни?