crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> #pragma pack и __attribute__, и того и другого в одном флаконе!
Анна
  опции профиля:
сообщение 12.4.2017, 14:39
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 276
Регистрация: 22.5.2008
Из: Зеленоград
Пользователь №: 181

Спасибо сказали: 30 раз(а)




Репутация:   4  


Люди, помогите, пожалуйста!

Ко мне приходят заголовочные файлы с конструкцией (человек пишет под Linux)

typedef struct __attribute__ ((packed))
{
...
}MyStruct;


Мне надо обернуть этот код конструкцией #pargma pack, чтобы собирать и под Линуксом + gcc и под виндой + MSVS. Причём конструкцию для Линукса просили не трогать.
Читала описание __attribute__, искала примеры. Везде примеры без typedef.
Поскольку пишу под Qt, то выдумала следующий код
#ifdef Q_OS_WIN32
#pragma pack(push, 1)
typedef struct
#else
typedef struct __attribute__ ((packed))
#endif
{
...
} MyStruct;
#ifdef Q_OS_WIN32
#pragma pack(pop)
#endif


Вроде бы работает, но меня не покидает ощущение, что что-то я сделала не так, или можно было покрасивее.
В том числе смущает ещё и тот момент, что в описании __attribute__ сказано, что он ставится в конце, то есть после MyStruct, но раз с "той стороны" пришла такая конструкция, то хотелось бы просто понять, почему сделано так, а не по оприсанию.

Может кто-нибудь что-нибудь предложить?
И, вообще, хотелось бы посмотреть на варианты объявления структур с упаковкой и для "того" и для "другого", с typedef и без typedef.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 13.4.2017, 10:16
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


lanz, mingw тоже понимает #pragma pack
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 16:06