On Tue, 4 Apr 2006, Joerg Schilling wrote: JS>Steve Bennett <[EMAIL PROTECTED]> wrote: JS> JS>> I don't think unspecified means irrelevant. JS>> JS>> > JS>> > struct test2 { JS>> > char blerg[1]; JS>> > char type[4]; JS>> > char flibble[3]; JS>> > char more[2]; JS>> > char dummy[1]; ^^^
With the 1 there the compiler can pad at the end so that the sizes and offsets below are legal. If you put an empty [], then and only then the offset of dummy MUST be equal to the struct size (but there may be padding between more and dummy). JS>> > }; JS>> JS>> And the result: JS>> JS>> sizeof(test1) is 12 JS>> offsetof(test1, more) is 8 JS>> offsetof(test1, dummy) is 10 JS>> JS>> > JS>> > Now, sizeof(test1) needs to be == offsetof(test2, dummy); JS>> > JS>> > It seems that this is mot the case for GCC. JS>> JS>> So either this is the case because the you are misunderstanding JS>> the spec or because the GCC arm guys are misunderstanding the spec. JS> JS>OK, now I have access to the printed standard at work.... JS> JS>Working draft 1997-11-21: JS> JS>-------> JS>As a special case, the last element of a structure may be an incomplete type. JS>This is called a flexible array member, and the size of the structure shall be JS>equal to the offset of the last element of an otherwise identical structure that JS>replaces the flexible array member with an array of one element. JS><------ JS> JS>It is obvious that the new version of the text has been made more universal JS>from a theoretical standpoint (the new text does not allow the compiler to JS>behave different in case that the size of the replaced last element differs JS>from 1) but unfortunately this reduces readability for the first attempt JS>to read.... JS> JS>The recent C-99 text basically says the same as the important part of JS>the new sentence is that the size of the structure shall be equal to JS>the offset of the flexible array member. JS> JS>However, I understand that it would take some time to fix the GCC and JS>to wait until the fixed gcc appears at end user systems. JS> JS>What the last 10 lines in mkisofs.h show is that it seems to be usual (not JS>only for GCC) to tail pad structures on some architectures. I've not looked at the .h file, but if the last member of the struct is really [1] and not [], then gcc behaviour is correct. harti JS>We need to find a different way to solve your problem that is insensitive to JS>compiler bugs. JS> JS> JS>Thank you for pointing to this problem! JS> JS>J?rg JS> JS> -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]