Así que estoy optimizando algunos códigos desenrollando algunos loops (sí, sé que debo confiar en mi compilador para hacer esto por mí, pero no estoy trabajando con mi elección de compiladores) y Quería hacerlo con elegancia, de modo que, en caso de que el tamaño de mis datos cambie debido a algunas ediciones en el futuro, el código se degradará elegantemente.C sizeof equivalent for macros
Algo así como:
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
Esto no funciona, por supuesto, ya sizeof
no está disponible para el pre-procesador (al menos, eso es lo que parecía indicar this answer).
¿Existe una solución fácil que pueda usar para obtener sizeof
una estructura de datos para usar con una macro C, o solo soy SOL?
Bueno, sizeof() ** es ** una macro. Una macro incorporada, al menos. – Havenard
sizeof no es una macro, en cualquier forma o forma –
sizeof no es una macro, aunque offsetof es. sizeof es más un operador. –