Steve Bennett <[EMAIL PROTECTED]> wrote: > > #include <stdio.h> > > > > struct test1 > > { > > char blerg[1]; > > char type[4]; > > char flibble[3]; > > char more[2]; > > } __attribute__((packed)); > > > > _Pragma("pack(1)") struct test2 > > { > > char blerg[1]; > > char type[4]; > > char flibble[3]; > > char more[2]; > > }; > > > > int main (int argc, char **argv) > > { > > printf("sizeof(test1) is %d\n", sizeof(struct test1)); > > printf("sizeof(test2) is %d\n", sizeof(struct test2)); > > > > return 0; > > } > > > > What does this print? > > sizeof(test1) is 10 > sizeof(test2) is 12
So _Pragma() works the same way as #pragma. > > What do you get from: > > > > printf("vers %d\n", __STDC_VERSION__): > > test2.c: In function 'main': > test2.c:5: error: '__STDC_VERSION__' undeclared (first use in this function) > test2.c:5: error: (Each undeclared identifier is reported only once > test2.c:5: error: for each function it appears in.) > test2.c:5: error: syntax error before ':' token This is interesting! I tought that GCC is a bit closer to the standard..... > > what do you get from: > > > > struct test1 > > { > > char blerg[1]; > > char type[4]; > > char flibble[3]; > > char more[2]; > > char dummy[]; > > }; > > > > int main (int argc, char **argv) > > { > > printf("sizeof(test1) is %d\n", sizeof(struct test1)); > > > > return 0; > > } > > sizeof(test1) is 12 This is really bad! After reading the C-99 Standard, it turned out that the last method is the "official" way to prevent tail padding of structures. Could you please run the last test again but use: #pragma pack(1) struct test1 { char blerg[1]; char type[4]; char flibble[3]; char more[2]; char dummy[]; }; Jörg -- EMail:[EMAIL PROTECTED] (home) Jörg Schilling D-13353 Berlin [EMAIL PROTECTED] (uni) [EMAIL PROTECTED] (work) Blog: http://schily.blogspot.com/ URL: http://cdrecord.berlios.de/old/private/ ftp://ftp.berlios.de/pub/schily