所以我通過展開一些循環來優化一些代碼(是的,我知道我應該依靠我的編譯器爲我做這件事,但我沒有選擇編譯器)和我想稍微優雅一些,以防萬一我的數據大小因未來的一些編輯而發生變化,代碼將會優雅地降級。宏的等效C sizeof
喜歡的東西:
typedef struct {
uint32_t alpha;
uint32_t two;
uint32_t iii;
} Entry;
/*...*/
uint8_t * bytes = (uint8_t *) entry;
#define PROCESS_ENTRY(i) bytes[i] ^= 1; /*...etc, etc, */
#if (sizeof(Entry) == 12)
PROCESS_ENTRY(0);PROCESS_ENTRY(1);PROCESS_ENTRY(2);
PROCESS_ENTRY(3);PROCESS_ENTRY(4);PROCESS_ENTRY(5);
PROCESS_ENTRY(6);PROCESS_ENTRY(7);PROCESS_ENTRY(8);
PROCESS_ENTRY(9);PROCESS_ENTRY(10);PROCESS_ENTRY(11);
#else
# warning Using non-optimized code
size_t i;
for (i = 0; i < sizeof(Entry); i++)
{
PROCESS_ENTRY(i);
}
#endif
#undef PROCESS_ENTRY
這不工作,當然,因爲sizeof
是不提供給預處理器(至少,這是this answer似乎什麼來表示)。
有沒有一種簡單的解決方法,我可以用它來獲得用於C宏的數據結構sizeof
,還是我只是SOL?
那麼,sizeof()**是一個宏。一個內置的宏,至少。 – Havenard 2009-08-20 21:01:30
sizeof是不是一個宏,在任何形狀或形式 – 2009-08-20 21:08:29
sizeof是不是一個宏,雖然offsetof是。 sizeof更像是一個運營商。 – 2009-08-20 21:09:16