Váš kousek kódu může mít nedefinované chování kvůli aliasingu.
A to prosím kde/jak?
Tohle
uint32_t x = 1;
uint8_t *p = (uint8_t *)&x;
je ok jen pokud je uint8_t typedef na unsigned char. C zaručuje jen to, že uint8_t je nějaký 8b int. Že je to character, který může aliasovat, zaručené není.
Dlouho byl unsigned char jediný standardní typ, na který ten typedef mohl rozumně vést. Ale C23 přišlo s _BitInt. To už zní dost lákavě na to, aby tou cestou někdo zkusil jít. Protože díky tomu aliasingu se uint8_t hůř optimalizuje.
Třeba tady kdysi probírali, jak by se dalo uint8_t oddělit od charu:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66110Jo, jsou to hypotetické obavy. Ale tak je to s UB v C vždycky. Lepší optimalizátor začne využívat další možnosti a najednou se to rozbije.