Итак, я оптимизирую некоторый код, развернув несколько циклов (да, я знаю, что должен сделать это для себя, полагаясь на свой компилятор, но я не работаю с выбором компиляторов), и я хотел это сделать несколько изящно, так что в случае, если мой размер данных изменится из-за некоторых изменений в будущем, код будет элегантно ухудшаться.
Что-то вроде:
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?