|
Опасные определения, приводят к катастрофе! |
|
|
|
Sep 7 2007, 14:44
|

Профессионал
    
Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807

|
В программе есть описания:
#define BIT(x) (1 << (x)) #define SETBIT(x,y) (x |= (1<<y)) // Set bit y in byte x #define SETBITS(x,y) (x |= (y)) // Set bits y in byte x
Соответственно при написании исходных текстов пользователь может забыть как правильно использовать эти определения и написать примерно так:
SETBIT(TIMSK,TOIE1); SETBITS(TIMSK,TOIE1+TOIE0);
Очевидно, оба предложения валидны с точки зрения компилятора при использовании стандартных определений битов (через цифры 7...0). Однако второе предложение является ошибочным. Нужно правильно записать так:
SETBITS(TIMSK,BIT(TOIE1)+BIT(TOIE0));
Хотелось бы сделать так, чтобы либо компилятор выдавал сообщение об ошибке, или переписать определение для SETBITS, чтобы оно имело бОльшую "защиту от дурака". Как это разумнее сделать в IAR EWAVR?
|
|
|
|
|
 |
Ответов
|
Sep 7 2007, 22:08
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
0xFF, но повод хороший. Не могу не поделиться замечательным макросом: Код #define sizeof(x) rand() (с) ibash.org UPD-Disclaimer: Данное макроопределение является т.н. шуткой. Использование данного макроса может привести к катастрофическим последствиям. Не используйте его, если полностью не уверены в своих действиях.
|
|
|
|
|
Sep 8 2007, 10:04
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(aaarrr @ Sep 8 2007, 05:08)  0xFF, но повод хороший. Не могу не поделиться замечательным макросом: Код #define sizeof(x) rand() (с) ibash.org Изумительный вариант для сюрпризов. Хоть бы уж так написали: SIZEOF(x).
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
ivainc1789 Опасные определения Sep 7 2007, 14:44 Непомнящий Евгений Цитата(ivainc1789 @ Sep 7 2007, 18:44) #d... Sep 7 2007, 14:53 zltigo Цитата(ivainc1789 @ Sep 7 2007, 17:44) SE... Sep 7 2007, 17:46 ivainc1789 Цитата(zltigo @ Sep 7 2007, 21:46) Будьте... Sep 7 2007, 18:23  zltigo Цитата(ivainc1789 @ Sep 7 2007, 21:23) Wa... Sep 7 2007, 18:48 singlskv Цитата(ivainc1789 @ Sep 7 2007, 18:44) В ... Sep 7 2007, 19:14 zltigo Цитата(singlskv @ Sep 7 2007, 22:14) у ... Sep 7 2007, 19:56  singlskv Цитата(zltigo @ Sep 7 2007, 23:56) Скобоч... Sep 7 2007, 20:06   zltigo Цитата(singlskv @ Sep 7 2007, 23:06) а у ... Sep 7 2007, 20:15    singlskv Цитата(zltigo @ Sep 8 2007, 00:15) Тогда ... Sep 7 2007, 20:19     zltigo Цитата(singlskv @ Sep 7 2007, 23:19) Поэт... Sep 7 2007, 20:38      singlskv Цитата(zltigo @ Sep 8 2007, 00:38) Все ст... Sep 7 2007, 20:48       zltigo Цитата(singlskv @ Sep 7 2007, 23:48) 1... Sep 7 2007, 20:58        singlskv Цитата(zltigo @ Sep 8 2007, 00:58) Ну это... Sep 7 2007, 21:19         zltigo Цитата(singlskv @ Sep 8 2007, 00:19) этот... Sep 8 2007, 05:47 ivainc1789 Мдя... А я уже было думал, что привык... Придется ... Sep 7 2007, 21:16
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|