我对avr-gcc有一个奇怪的问题。如果我这样做:
int i = 0;
i = ++i;
导致编译器警告:
warning: operation on ‘i’ may be undefined
这里有什么问题?
如果被重写为
i = i + 1;
不会导致警告。
avr-gcc是版本4.3.4,我在Ubuntu 10.04上运行它。
答案 0 :(得分:8)
如果您打算简单地增加i
,请使用
i = i + 1;
或
++i;
(或i++
),但不是两者。 C的规则不允许您在单个序列点之前修改变量两次。 preincrement(++i
)和赋值(i =
)都会修改i
的值。