Russian Qt Forum
Май 17, 2024, 16:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Multiply character constant  (Прочитано 2519 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Февраль 07, 2010, 22:57 »

Добрый день

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

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

Спасибо

Записан
BRE
Гость
« Ответ #1 : Февраль 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" );
 
« Последнее редактирование: Февраль 07, 2010, 23:38 от BRE » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Февраль 08, 2010, 16:58 »

В первом варианте неудобно писать много кавычек/запятых. Со вторым к сожалению я не смогу написать так
Код:
switch (ID) {
  case TAG("TAG1"):
    ...
    break;
}
Но все равно, спасибо за поддержку  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.242 секунд. Запросов: 22.