Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Разве есть что-то, что нельзя запихнуть в define используя просто { }, и чтобы эта трудность преодолевалась введением цикла? Где это обсуждалось?
Отправлено
VasilyS
(80.92.96.25)
03 января 2010, г. 23:07
В ответ на:
Такую конструкцию do { } while(0) можно в #define препроцессора запихнуть, а с "прямыми" вариантом при этом могут возникнуть нюансы. Обсуждалось неоднократно.
отправлено rezident 03 января 2010, г. 22:29
Составить ответ
|
Вернуться на конференцию
Ответы
А как вы в #define запихнете несколько операторов в один цикл, кроме как обертки из еще одного цикла do {} while? Где именно обсуждалось не помню. Варианты: 1) здесь же, 2) на caxapa.ru, 3) на electronix.ru.
-
rezident
(03.01.2010, 23:17:46
77.43.130.155
,
пустое
)
Насчет обёртки цикла, ей-Бо, не понял. Опишите поконкретнее примерчик пожалуйста.
-
VasilyS
(03.01.2010, 23:22:53
80.92.96.25
,
пустое
)
Имею в виду обертку для дефайна. Пример, придуманный от балды
-
rezident
(04.01.2010, 00:31:47
77.43.130.155
, 674 байт)
Второй вариант вы имели в виду #define LEDOUT(var,bit) { if ((var&bit)==0) P1OUT&=~0x01; else P1OUT|=0x01; }. Обо всем этом я упоминал и варианты решений без while(0) давал. Ошибки не будет, если >>
-
VasilyS
(04.01.2010, 00:58:14
80.92.96.25
, 239 байт)
Дело не совсем в IF и скобках. Макроc может и как безусловный оператор использоваться. Обертка do { } while(0) позволяет использовать его в любом варианте, невзирая на ленность кодера и его стиль программирования ;)
-
rezident
(04.01.2010, 01:07:48
77.43.130.155
,
пустое
)
Причем сама обертка не влияет на размер кода, т.к. оптимизируется (выкидывается) на этапе компиляции.
-
rezident
(04.01.2010, 01:08:44
77.43.130.155
,
пустое
)
Тогда возвращаемся: Приведите пожалуйста пример, где "проблемно" или "невозможно" при написании или подстановке макроса обойтись без do{}while(0), а я утверждаю что сделаю его посредством {}, которые кода тоже не потребляют :-) Можно и на следующей странице продолжить.
-
VasilyS
(04.01.2010, 10:09:38
80.92.96.25
,
пустое
)
Скорее всего ты прав. Иногда программисты любят извращённый стиль, отсюда и do ... while (0)
-
ZoltriX
(04.01.2010, 11:23:24
78.40.231.89
,
пустое
)
Пардон! во втором варианте ; в конце дефайна забыл убрать. Но ошибка не из-за нее возникает. else without if что-то типа такого.
-
rezident
(04.01.2010, 00:33:1
77.43.130.155
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
увеличьте 2 вдвое:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru