接受的答案(「否」)是正確的,但我想澄清一個可能誤導的部分。我會添加評論,但需要格式化一些代碼;因此是新的答案。
的typedef只是假名或別名中指定的實際類型,它們不存在作爲單獨的類型具有不同的取向,包裝等。
這是不正確的,至少GCC (OP的編譯器)和GHS。例如,以下編譯沒有錯誤,表明對齊可以將附加到typedef。
不正確的對齊(大於對象的大小)僅僅是爲了震撼和娛樂價值。
#define CASSERT(expr) { typedef char cassert_type[(expr) ? 1 : -1]; }
typedef __attribute__((aligned(64))) uint8_t aligned_uint8_t;
typedef struct
{
aligned_uint8_t t;
} contains_aligned_char_t;
void check_aligned_char_semantics()
{
CASSERT(__alignof(aligned_uint8_t) == 64);
CASSERT(sizeof(aligned_uint8_t) == 1);
CASSERT(sizeof(contains_aligned_char_t) == 64);
}
絕對不是一個愚蠢的問題。我認爲myAlignedStruct2的排列方式與myAlignedStruct相同,但希望能夠確定。您是否嘗試過使用printf(「尺寸:%d,%d」,sizeof(myAlignedStruct),sizeof(myAlignedStruct2)); ? – Shlublu
@Shlublu:'sizeof'檢查包裝,但對齊不同!沒有標準的運算符,但是GCC提供'__alignof __()',如我的答案所示。 –
啊,對不起,我混了!這使你的問題更加有趣! – Shlublu