Quindi sto ottimizzando del codice srotolando alcuni loop (sì, so che dovrei fare affidamento sul mio compilatore per farlo, ma non sto lavorando con la mia scelta di compilatori) e Volevo farlo con un po 'di grazia in modo che, nel caso in cui le mie dimensioni dei dati dovessero cambiare a causa di alcune modifiche in futuro, il codice si degraderebbe elegantemente.Dimensioni C equivalenti per macro
Qualcosa di simile:
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
Questo non funziona, naturalmente, dal momento sizeof
non è disponibile per il pre-processore (almeno, questo è quello che sembrava this answer per indicare).
C'è una soluzione facile che posso usare per ottenere la sizeof
una struttura dati da usare con una macro C, o sono solo SOL?
Bene, sizeof() ** è ** una macro. Una macro integrata, almeno. – Havenard
sizeof non è una macro, in qualsiasi forma o modulo –
sizeof non è una macro, anche se offsetof è. sizeof è più di un operatore. –