Re: вывод текста в прозрачном окне.
От: Кодт Россия  
Дата: 08.11.05 14:14
Оценка:
Здравствуйте, lord_206, Вы писали:

Небольшой оффтопичный комментарий:
_>#define MAP_STYLE(src, dest) if(dwStyle & (src)) dwText |= (dest) 
_>#define NMAP_STYLE(src, dest) if(!(dwStyle & (src))) dwText |= (dest)

Такой код таит в себе опасность.
if(something)
  MAP_STYLE(x,y);
else // этот else будет относиться к if внутри макроса
  MAP_STYLE(z,t);

Простое заворачивание в фигурные скобки — тоже не выход: ';' после макроса окажется лишней (и может сыграть злую шутку)
#define MAP_STYLE(x,y) {.....}

if(something)
  MAP_STYLE(x,y); // ';' закрывает вcю конструкцию if...
else // error: 'else' without 'if'
  .....


Есть несколько выходов из положения:
// 1) сделать ветвление выражением, а не стейтментом
#define IF(cond,onTrue) ( (cond) ? (void)(onTrue) : (void)0 )
// 2) перетащить условие в ветку else
#define IF(cond,onTrue) if(!(cond)) {} else onTrue
// 3) завернуть конструкцию в do-while (правда, в onTrue)
#define IF(cond,onTrue) do{ if(cond) onTrue; }while(false)
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.