ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
215334 Топик полностью
Snaky (13.10.2010 07:49 - 07:52, просмотров: 204) ответил Bill на Интересно, а в каких случаях она является полезной?
использую как минимум в двух случаях: 1. для обрамления определения макроса, выполняющего несколько операций зараз (a-la inline-функция) #define LED(L) do{FP_LED_R = ((L) & 0x01); FP_LED_G = (((L)>>1) & 0x01);}while(0) /* Включаем двухцветный светодиод с определенным цветом */ простое обрамление в фигурные скобки даст ошибку в случае такого вызова макроса: if (condition1) LED(GREEN); // вызов макроса будет вида {...}; <- компилятор ругнется на точку с запятой else LED(ORANGE); // снова вызов макроса необрамление операций в макросе вообще ничем - еще более опасная вещь, очевидно. ссылки в тему: http://stackoverfl …-0-what-is-it-good-for http://stackoverfl …ns/2687569/c-do-while0 2. если надо однократно выполнить блок действий, но при ошибке в любой операции - перейти сразу к следующему блоку. можно использовать goto, но если не хочется использовать неправославный оператор, то можно блок обрамить do {} while(0); и выйти по break за блок в любой момент. что-то типа так: do { x = foo1(a, b, c); if(x == 0) break; y = foo2(x, d, e); if(y == 2) break; // etc etc } while(0); // прочие действия
DRC придумали трусы