Добавление двух 32-разрядных целых чисел может привести к переполнению целых чисел:
uint64_t u64_z = u32_x + u32_y;
Этого переполнения можно избежать, если одно из 32-битных целых чисел сначала добавлено или добавлено в 64-разрядное целое число.
uint64_t u64_z = u32_x + u64_a + u32_y;
Однако, если компилятор решает изменить порядок добавления:
uint64_t u64_z = u32_x + u32_y + u64_a;
может произойти переполнение целых чисел.
Разрешено ли компиляторам выполнять такое переупорядочение или мы можем доверять им, чтобы заметить несогласованность результата и сохранить порядок выражения как есть?