编译器可以改变声明的顺序吗?

时间:2011-10-26 20:22:32

标签: c standards

在诸如int i, v[5], j;之类的声明中,如何分配变量?是否允许编译器更改其顺序?

3 个答案:

答案 0 :(得分:3)

是的,只要程序的含义保持不变,编译器就可以做任何想做的事情。这些变量可能不存在优化,仅存储在寄存器中,重用于其他目的,重新排序以满足对齐要求。

(请注意,编译器无法对结构中的变量重新排序)

答案 1 :(得分:2)

是的,编译器可以(并将会)更改顺序。订购是特定于编译器的,未在C标准中指定。 C标准甚至没有指定堆栈应该存在。

答案 2 :(得分:1)

允许编译器在任何需要的地方分配