Недавно у нас была лекция в университете о специальных программах на нескольких языках.
Лектор записал следующую функцию:
inline u64 Swap_64(u64 x)
{
u64 tmp;
(*(u32*)&tmp) = Swap_32(*(((u32*)&x)+1));
(*(((u32*)&tmp)+1)) = Swap_32(*(u32*) &x);
return tmp;
}
В то время как я полностью понимаю, что это также очень плохой стиль с точки зрения удобочитаемости, его основная цель заключалась в том, что эта часть кода отлично работала в производственном коде, пока они не обеспечили высокий уровень оптимизации. Тогда код просто ничего не сделает.
Он сказал, что все назначения переменной tmp
будут оптимизированы компилятором. Но почему это произойдет?
Я понимаю, что существуют ситуации, когда переменные должны быть объявлены волатильными, чтобы компилятор их не трогал, даже если он думает, что они никогда не читаются и не записываются, но я не знаю, почему это произойдет здесь.