为什么优化会破坏此功能?
我们最近在大学里开了一个关于多种语言编程特色的讲座。
讲师写下了以下功能:
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
都将由编译器优化。但为什么会这样呢?
我知道有些情况下变量需要声明为volatile,这样编译器就不会触及它们,即使他认为它们永远不会被读或写,但我不知道为什么会发生这种情况。
慕哥9229398
潇湘沐