ich dieses Beispielprogramm haben unter#pragma pack() mit Push- und Pop-vs auspacken
#include <stdio.h>
#include <stdlib.h>
#pragma pack(push)
#pragma pack(1)
typedef struct{
char a;
int b;
char c;
}st_a;
#pragma pack(pop)
typedef struct{
char a;
int b;
char c;
}st_b;
int main()
{
printf("size of struct a %zd \n",sizeof(st_a));
printf("size of struct b %zd \n",sizeof(st_b));
return 0;
}
Ausgabe des obigen Programms ist
size of struct a 6
size of struct b 12
Nun, wenn ich die Strukturdeklaration wie unten ändern:
#pragma pack(1)
typedef struct{
char a;
int b;
char c;
}st_a;
#pragma unpack()
Ausgabe des Programms ist
size of struct a 6
size of struct b 6
Warum ist dieser Unterschied im Verhalten? Mein Verständnis war, dass beide Strukturdeklarationen dasselbe tun.
Ich führe dies auf meinem MBP.
$gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.4.0
Thread model: posix
Welchen Compiler benutzen Sie? – slugonamission
Ich vermute, dass Sie MSVC verwenden. AFAICT es gibt kein Pragma 'entpacken()' – Hasturkun
@Hasturkun - Die Renesas-Compiler unterstützen '#pragma entpacken' zwar, aber scheinen' 'pragma pack (push)' nicht zu unterstützen: S. – slugonamission