On Tue, 21 May 2024 01:11:42 +0400 Ivan A. Melnikov wrote: > On Mon, May 20, 2024 at 11:37:50PM +0300, Vladislav Zavjalov wrote: > > Всем привет! > > > > Локализовал какую-то странную проблему в C коде, > > не понимаю, это проблема с моим пониманием С или с компилятором. > > > > Код ниже: число печатается кусочками по два байта. > > Это перестает работать при компиляции с -O2 или -O3. > > Это неопределённое поведение (UB), вызванное нарушением strict > aliasing rules. Так делать не надо, но если очень хочется, > (осторожно: учу плохому) добавьте `-fno-strict-aliasing` > к ключам компилятора. > > А вообще про strict aliasing почитайте, полезное. Можно же union использовать, он именно для такой задачи и создавался: union val { uint32_t v32; uint16_t v16[2]; }; Тогда проблем со strict aliasing не будет и костыли с -fno-strict-aliasing не нужны. Best regards, Andrew Savchenko