ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
1150804 Топик полностью
RxTx (03.12.2021 00:24, просмотров: 290) ответил Vit на в вашем примере как раз нет определений - есть объявление (с выделением памяти). и оно следует сразу после директивы pack. мелкомягкие вполне резонно игнорируют директиву, если нет объявления (выделения памяти) непосредственно после неё. о чём прямо пишут - объявление (выделение памяти) должно быть непосредственно после директивы и распространяется только на первое таковое
Правильно только это: 
/***** .h - заголовок *****/

#pragma pack(1) struct tsPacked1 /* Это объявление/declaration типа структуры, память не выделяет и на него действует pragma pack */ { char a,b,c; }; #pragma pack()

#pragma pack(1)
typedef struct /* опционально тэг структуры */
{
char a,b,c;
} tsPacked2; /* Это объявление/declaration типа структуры, память не выделяет и на него действует pragma pack */
#pragma pack()



/***** .c-файл *****/

struct tsPacked1 spacked1; /* Это объявление/declaration имени переменной и одновременно определение/definition (выделяет память), pragma pack на него не действует, действует из заголовка */
tsPacked2 spacked2; /* Это объявление/declaration имени переменной и одновременно определение/definition (выделяет память), pragma pack на него не действует, действует из заголовка */



/***** либо .c-файл, либо заголовок, но объявления структур выше должны быть видны *****/

extern struct tsPacked1 spacked1; /* Это объявление/declaration имени переменной (не выделяет память), pragma pack на него не действует, действует из заголовка */
extern tsPacked2 spacked2; /* Это объявление/declaration имени переменной (не выделяет память), pragma pack на него не действует, действует из заголовка */