Can a C++ compiler (specifically g++) re-order the internal elements of a struct?
I'm seeing some strange behaviour where I have a structure that contains something like the following:
Struct SomeStruct{ ... ... long someLong; long someLongArray[25]; unsigned long someUnsignedLong; unsigned long someUnsignedLongArray[8]; unsigned long int someUnsignedLongInt; ... ... }; When I write output this to file, the order of someUnsignedLongArray and someLongArray seem to be reversed (i.e. the elements in someLongArray[] appear after someUnsignedLong and the elements of someUnsignedLongArray[] appear after someLong). Is this possible??
Thanks
Update: As requested, I am writing out the structure using the following:
int fd = open(fspec,O_RDWR|O_CREAT|O_TRUNC,0666); int writeRes = write(fd,(char *)&someStruct,sizeof(SomeStruct)); For completeness, here is the full struct:
struct SomeStruct{ byte someByte; byte someByteArray[6]; char someChar; char someCharArray[5]; char someCharArrayArray[3][5]; short someShort; signed short someShortArray[2]; unsigned short someUnsignedShort; unsigned short someUnsignedShortArray[8]; int someInt; int someIntArray[3]; int someIntArrayArrayArrayArray[4][3][2][6]; int *pSomeInt; unsigned int someUnsignedInt; unsigned int someUnsignedIntArray[9]; long someLong; long someLongArray[25]; unsigned long someUnsignedLong; unsigned long someUnsignedLongArray[8]; unsigned long int someUnsignedLongInt; long long someLongLong; long long someLongLongArray[5]; bool someBool; bool someBoolArray[3]; unsigned long long someUnsignedLongLong; unsigned long long someUnsignedLongLongArray[5]; unsigned long long someUnsignedLongLongArrayArray[5][2]; unsigned long long int *pSomeUnsignedLongLongInt; };