以下代码具有未定义的行为。这就是我试图查看代码的程序集(x86)的原因。对于clang和gcc存在rbp, rsp, rax, rdi
而不是ebp, esp, eax
和edi
等寄存器,我感到很惊讶。例如,当我查看反汇编时,在VS2015中调试此代码段时,在编译x86平台时,我看不到任何以r
开头的寄存器。
#include <iostream>
void f(int i, int j) { std::cout << i + j << '\n'; }
int main()
{
int i = 1;
f(i = -1, i = -1000);
std::cout << i << '\n';
}
答案 0 :(得分:-1)
Jester的评论已经回答了这个问题:
假设代码是针对x64而进行了反汇编,实际上代码是针对x86的,显然需要为此反汇编程序使用-m32开关。