Czy __atrybut GCC __ ((__ zapakowany__)) zachowuje oryginalne zamówienie?
Cel, powód
Piszę program sieciowy w C (konkretniegnu89
) i chciałbym uprościć rzeczy, reinterpretując pewnestruct X
jako duża tablica bajtów (a.k.a.char
), wysyłanie bajtów przez sieć i reinterpretowanie ich jakostruct X
z drugiej strony. W tym celu zdecydowałem się użyć atrybutu __attribute gcc __ ((__ pakowany__)). Zrobiłem wszystko, co w mojej mocy, aby zapewnić, że jest to zrobione poprawnie (tj. Uwzględniłem endianność i inne powiązane kwestie).
Pytanie
Inne niż zagwarantowanie tegostruct X
jest tak mały, jak to możliwe, czy gcc gwarantuje, że astruct
zdefiniowany za pomocą __attribute __ ((__ pakowany__)) zachowuje oryginalne zamówienie? Szukałem dość dużo i nie znalazłem jeszcze żadnej dokumentacji dotyczącej tego, czy ta gwarancja istnieje.
Uwagi
Można bezpiecznie założyć, że zarówno nadawca, jak i odbiorca nie napotkają problemów z przenośnością (np.sizeof(int)
na serwerze jest równysizeof(int)
na kliencie).