警告: ‘i’上的运算结果可能是未定义的
#include "stdio.h"
int main()
{
int i=4, y;
y=(i++) + (i++);
printf("%d", y);
return 0;
}
8在我这是这个结果。由于自增运算符必须是左值,个人认为只有这个结果的搭配。
movl $4, -8(%ebp) #就是i
movl -8(%ebp), %eax
addl -8(%ebp), %eax #结果为8=%eax
movl %eax, -12(%ebp) # i=4 %eax和-12(%ebp)都是8
addl $1, -8(%ebp) #i++ 结果在-8(%ebp)
addl $1, -8(%ebp) #i++
movl -12(%ebp), %eax # -12(%ebp)=8=%eax
movl %eax, 4(%esp) #参数2 y
movl $.LC0, (%esp) #参数1 "%d"
call printf
不同编译器可能不同吧
但我的编译器是这样实现的 :
addl $1, -8(%ebp) #i++ 结果在-8(%ebp)
addl $1, -8(%ebp) #i++
不知道你们的是什么样,初学,可能说的不对,给批评教育
[[it] 本帖最后由 c_acceleration 于 2008-5-1 11:12 编辑 [/it]]