Пользователям IAR C (AVR прежде всего). Только что обнаружили некорректность(?) компилятора.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
|
Отправлено
Bill 04 июня 2003 г. 13:48
|
|
|
|
Точнее - некорректность(?) препроцессора, связанная с обработкой директивы define.
#define _6_BIT 1<<6
и
#define _6_BIT (1<<6)
дают разные результаты при обработке выражения
PORT &= ~_6_BIT; // Сбросить бит
Т.е. препроцессор тупо подставляет текст из макроопределения со всеми вытекающими последствиями. Возможно это так и должно быть, но я встречал компиляторы (и сам делал так), которые текст макроопределения заключают в скобки (...). Будьте внимательны!
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Ответ: В заключение дискуссии. Цитата из Д.Ритчи — Bill (04.06.2003 15:46, 519 байт, ссылка)
- Ответ: — ANSI/ISO C (04.06.2003 14:46, 353 байт)
- Ответ: двоешник! Страуструпа почитай, что ли.. — ... (04.06.2003 14:24, 166 байт)
- В компиляторе IAR для MSP именно точно так же! Обязательно всегда ставлю скобки (с тех пор как накололся на этом). — Peter K. (04.06.2003 14:17, пустое)
- А какой эээ версии ? ;) — Весельчак_У (04.06.2003 14:15, пустое, картинка)
- я думаю Вы первый на такое напоролись:)) — Внимательный препроцессор (04.06.2003 14:04, пустое)
- да это ж в каждом учебнике написано. А если препроцессор поставит сам скобки - прибью ! — DASM (04.06.2003 13:54, пустое)
- Ну и зря. — Peter K. (04.06.2003 14:22, 315 байт)
- Всё правильно Дасм сказал - скобки надо ставить самому. Если их поставил препроцессор - это криминал.. — 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 байт)
- классика жанра - скобки надо ставить самому. — bialix (04.06.2003 13:52, пустое)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru