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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нужна помощь по _Pragma()  (Прочитано 2484 раз)
makar77
Гость
« : Март 31, 2015, 22:46 »

В файл .pro добавляю следующее:
Код:
DEFINES+=Q_PACKED_START=_Pragma(\"pack(push,1)\");
DEFINES+=Q_PACKED_STOP=_Pragma(\"pack(pop)\");

Например в заголовочный файл добавляю:
Код:
Q_PACKED_START
typedef struct
{
unsigned int One;
unsigned char Two;
}Any;
Q_PACKED_STOP

При сборке выдается ошибка "_Pragma takes a parenthesized string literal Q_PACKED_START"

Если сделать вот так(убрать из файла .pro макросы и добавить в заголовочный файл):
Код:
#define Q_PACKED_START _Pragma("pack(push,1)");
#define Q_PACKED_STOP _Pragma("pack(pop)");

Q_PACKED_START
typedef struct
{
unsigned int One;
unsigned char Two;
}Any;
Q_PACKED_STOP
то всё отлично!
На мой взгляд разницы никакой, а результат разный.Помогите советом (всю голову уже сломал), нужен именно первый вариант!
Записан
makar77
Гость
« Ответ #1 : Апрель 01, 2015, 09:53 »

Как говорят "утро, вечера мудренее", ответ на мой вопрос нашелся сам, видимо из-за особенностей работы компилятора (лексического разбора make файлов) , надо в .pro файле вот так делать:
Код:
DEFINES+=Q_START_PACKED=_Pragma(\\\"pack(push,1)\\\"); 
DEFINES+=Q_STOP_PACKED=_Pragma(\\\"pack(pop)\\\");
И будет счастье! Можно спокойно макросы Q_START_PACKED и Q_STOP_PACKED применять в ваших исходниках.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Апрель 01, 2015, 09:54 »

Это особенности qmake скорее.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
makar77
Гость
« Ответ #3 : Апрель 01, 2015, 10:05 »

qmake создаёт нормальный make файл, без проблем:
Код:
DEFINES= -DUNICODE -DQ_START_PACKED=_Pragma("pack(push,1)"); -DQ_STOP_PACKED=_Pragma("pack(pop)"); -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN
Видимо особенность следующего этапа, на котором проводится работа с make файлом.
В консоли сборки тоже всё хорошо.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Апрель 01, 2015, 10:08 »

Кстати, не советую использовать названия типа Q_*, они применяются в Кьюте. Прикинь, если в следующей версии они введут такой же макрос, но он будет совершенно не то делать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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