我正在嘗試以下操作,在win32上使用gcc。我是否誤解了GCC中的__attribute__((packed))?
#include <stdio.h>
struct st { char c; int x; } __attribute__ ((packed));
int main() {
printf("%d\n", sizeof(struct st));
return 0;
}
我期望打印的值是5,但它是8
具有以下,不過,我得到5
#include <stdio.h>
#pragma pack(1)
struct st { char c; int x; };
int main() {
printf("%d\n", sizeof(struct st));
return 0;
}
一定有什麼地方錯在我的計劃,但我看不到什麼。 我已閱讀gcc's manual和關於此的幾個問題,我仍然感到困惑。任何提示?
也從這些問題的答案,我明白,我不應該使用打包結構爲marshalling,我可能不會使用它很多,但我仍然想明白我無法看到這樣一個簡短的程序。
注意:gcc-4.9.2和gcc-4.8.4都會出現問題。
對我來說,它的工作原理。 http://codepad.org/Zrilgx9t –
@Jayesh好吧,那麼,我有gcc-4.9.2 [mingw-w64](http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting% 20Win32/Personal%20Builds/mingw-builds/4.9.2 /),這可能是這個版本的問題嗎? – Nivak
首先,你應該寫%lu而不是%d – yakoudbz