所以我通过展开一些循环来优化一些代码(是的,我知道我应该依靠我的编译器为我做这件事,但我没有选择编译器)和我想稍微优雅一些,以防万一我的数据大小因未来的一些编辑而发生变化,代码将会优雅地降级。宏的等效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