所以我通过展开一些循环来优化一些代码(是的,我知道我应该依靠我的编译器来为我做这件事,但我没有使用我选择的编译器)我想这样做有点优雅所以万一我的数据大小由于将来的一些编辑而改变,代码将优雅地降级。
就像是:
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
预处理器无法使用(至少,这就是这个答案似乎表明的)。
是否有一个简单的解决方法可以用来获取sizeof
用于 C 宏的数据结构,或者我只是 SOL?