Supongamos que tengo un fragmento de código como este (y supongamos que el relleno se inserta como digo en el comentario):
#include "stdint.h" struct A { uint8_t x; // 3 bytes of padding uint32_t y; }; void foo(struct A* a) { a->x = 0; }¿Se le permite al compilador borrar los bytes de relleno o hacer algo con los bytes de relleno en la función foo?
https://en.cppreference.com/w/c/language/object no dice nada sobre este tema, lo que me lleva a creer que sí, el compilador puede hacer esto...
La razón por la que quiero saber si el compilador puede o no hacer esto es que quiero memcmp dos estructuras, y quiero saber qué se me permite asumir...
Sí. C 2018 6.2.6.1 6 dice:
Cuando un valor se almacena en un objeto de tipo estructura o unión, incluso en un objeto miembro, los bytes de la representación del objeto que corresponden a cualquier byte de relleno toman valores no especificados...