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