Ну и зря.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Смотри:
#define multiplier 1+2
int b, c;
b = c*multiplier; //компилятор это вычислит как b = (c*1) + 2, в то время, как тебе хотелось b = c*(1+2)
Где такое нужно?
Пример - организация записной книжки во флэшке, где начало каждой новой области вычисляется как смещение от начала или конца предыдущей.
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Всё правильно Дасм сказал - скобки надо ставить самому. Если их поставил препроцессор - это криминал.. — Dr.Alex (04.06.2003 14:35, пустое)
- Ответ: если тебе хотелось b = c*(1+2) - так и нужно писать: #define multiplier (1+2) — ... (04.06.2003 14:26, пустое)
- Ответ: Да тут не о чем спорить! Просто некоторые компляторы (старые) заключали тест макроопределения в скобки сами. — Bill (04.06.2003 14:41, 201 байт)
- И я согласен - и я бы убил бы. Слава тем компиляторам, которые НЕ ставят. — John (04.06.2003 15:23, пустое)
- Ответ: согласен с Дасмом - за такое убил бы. — ... (04.06.2003 15:00, пустое)
- В этом что то есть... Но лучше бы этого не было. ! Все таки IAR в данном случае более прав. — Весельчак_У (04.06.2003 14:54, пустое, картинка)
- Да неправильно это! Откуда препроцессору знать, что вы хотите получить от него? Может вы специально скобки не поставили, а он их наставит! — Любящий С (04.06.2003 14:47, пустое)
- доказательства! в смысле какие компиляторы? — Внимательный препроцессор (04.06.2003 14:47, пустое)
- Как правило, если программист дефайнит что-нибудь, то — Peter K. (04.06.2003 14:46, 154 байт)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru