偶尔,我一直在问一个有趣的问题:x++和++x不能留在C值?很多人告诉我这++x不可能因为++ x的汇编代码没有返回寄存器.我对此表示怀疑.所以我做了一些实验.
c代码:
#include <stdio.h>
int main()
{
int a = 1;
a++ = 10;
++a = 10;
return a;
}
Run Code Online (Sandbox Code Playgroud)
gcc编译错误:
./test.c:6: invalid lvalue in assignment
./test.c:7: invalid lvalue in assignment
Run Code Online (Sandbox Code Playgroud)
更改代码和程序集:
int a = 1;
int b = a++;
int c = ++a;
Run Code Online (Sandbox Code Playgroud)
汇编代码:
0x08048400 <main+0>: push %ebp
0x08048401 <main+1>: mov %esp,%ebp
0x08048403 <main+3>: sub $0x18,%esp
0x08048406 <main+6>: movl $0x1,-0x4(%ebp)
0x0804840d <main+13>: mov -0x4(%ebp),%eax
0x08048410 <main+16>: mov %eax,-0x8(%ebp)
0x08048413 <main+19>: incl -0x4(%ebp) …Run Code Online (Sandbox Code Playgroud)