#pragma и __pragma MS против GCC ))
От: Andrew.W Worobow https://github.com/Worobow
Дата: 24.02.15 19:55
Оценка:
Есть определеение
#define __packed __attribute__(packed)


/* понятно что это GCC */

есть определение структуры

typedef struct __packed st1 
{
    int a,
    char b;
    int c;
}_st1;


Требуется написать это же (!!!) на МС-овском си.

Проблема в том, что
1) #pragma pack(1) — требует возвращения упаковки поумолчанию. Типа pack(push,1) ла-ла-ла pack(pop) в отличии от __attribute__
https://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html
2) наличие '#' нельзя использовать в макросах, НО есть выход __pragma(pack(1))
3) проблема в том, что вот такой код поедается

typedef struct 
#pragma pack(1)
st1 
{
    int a,
    char b;
    int c;
}_st1;


а вот такой нет

#define __packed __pragma(pack(1))
typedef struct __packed st1 
{
    int a,
    char b;
    int c;
}_st1;



То есть задача то простая — сделать так чтобы струкутры с атрибутами GCC были упакованы но можно только переопределелять слово __packed, которое стоит в коде местами после struct.
Не все кто уехал, предал Россию.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.