ho questo programma di esempio riportato di seguito#pragma pack() con push e pop vs disfare
#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;
}
uscita del programma di cui sopra è
size of struct a 6
size of struct b 12
Ora se cambio la dichiarazione struct come di seguito:
#pragma pack(1)
typedef struct{
char a;
int b;
char c;
}st_a;
#pragma unpack()
uscita del programma è
size of struct a 6
size of struct b 6
Perché questa differenza nel comportamento? La mia comprensione è che entrambe le dichiarazioni di struttura stanno facendo la stessa cosa.
Sto eseguendo questo sul mio 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
Quale compilatore stai utilizzando? – slugonamission
Immagino che tu stia utilizzando MSVC. AFAICT non c'è pragma 'unpack()' – Hasturkun
@Hasturkun - I compilatori Renesas supportano '#pragma unpack', anche se non sembrano supportare' #pragma pack (push) ': S. – slugonamission