Russian Qt Forum

Программирование => С/C++ => Тема начата: Igors от Февраль 07, 2010, 22:57



Название: Multiply character constant
Отправлено: Igors от Февраль 07, 2010, 22:57
Добрый день

Столкнулся с небольшой но противной проблемкой. Имею массу таких мест
Код:
unsigned long theID = 'TAG1';

Все нормально, буквы переводятся в байты, все работает. Но вот компиляторы сыпят warning'и. Мол, нехорошо так делать и все такое. Оно конечно не смертельно, но неприятно, можно и существенный warning просмотреть в куче. Могу отключить через pragma. Но приходится шпилить на 3 компиляторах, одному отключаю - другие не понимают и наоборот. Делать эту конструкцию в hex (типа 0x45464748) - ну так я не пойму где какой ID. Как бы мне это порешать?

Спасибо



Название: Re: Multiply character constant
Отправлено: BRE от Февраль 07, 2010, 23:10
Код
C++ (Qt)
#define TAG( a, b, c, d ) long( ((a)<<24)|((b)<<16)|((c)<<8)|(d) )
 
unsigned long theID = TAG( 'T','A','G','1' );
 

Код
C++ (Qt)
define TAG( a ) long( ((a[0])<<24)|((a[1])<<16)|((a[2])<<8)|(a[3]) )
 
unsigned long theID = TAG( "TAG1" );
 


Название: Re: Multiply character constant
Отправлено: Igors от Февраль 08, 2010, 16:58
В первом варианте неудобно писать много кавычек/запятых. Со вторым к сожалению я не смогу написать так
Код:
switch (ID) {
  case TAG("TAG1"):
    ...
    break;
}
Но все равно, спасибо за поддержку  :)