From: ovek AT arcticnet DOT no (Ove Kåven) Newsgroups: comp.os.msdos.djgpp Subject: __attribute__((packed)) Date: Sun, 20 Oct 1996 13:26:43 GMT Organization: Vplan Programvare AS Lines: 58 Message-ID: <54h664$kgf@troll.powertech.no> NNTP-Posting-Host: alwayscold.darkness.arcticnet.no To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Well I was getting bored of all those posts incorrectly stating that you have to use the packed attribute on each and every member of a structure if you want it packed, when I had for a long time used what it says in the Info documentation ("Type Attributes"): >Specifying this attribute for `struct' and `union' types is >equivalent to specifying the `packed' attribute on each of the >structure or union members. And even successfully wrapped it into a typedef... so I decided to write a test program that demonstrated this: #include typedef struct { char A; int B; } S1; typedef struct { char A __attribute__((packed)); int B __attribute__((packed)); } S2; typedef struct { char A; int B; } __attribute__((packed)) S3; typedef unsigned p; int main() { S1 s1; S2 s2; S3 s3; printf("S1: Offset to B is %d, size is %ld\n", (p)(&s1.B)-(p)(&s1),sizeof(s1)); printf("S2: Offset to B is %d, size is %ld\n", (p)(&s2.B)-(p)(&s2),sizeof(s2)); printf("S3: Offset to B is %d, size is %ld\n", (p)(&s3.B)-(p)(&s3),sizeof(s3)); return(0); } And the output is, indeed, S1: Offset to B is 4, size is 8 S2: Offset to B is 1, size is 5 S3: Offset to B is 1, size is 5 Maybe some of this confusion might be caused by the fact that the pointer "(See the "Type Attributes" section of the "GNU C/C++ Manual")" in section 22.9 of the FAQ on www.delorie.com really links to "Variable Attributes" instead, which has an packed-attribute example in the fashion of S2 in my test program.