64,654
社区成员
发帖
与我相关
我的任务
分享
int myFun(){
if(false){
int valA;
}
switch(false){
case true:{
int valB;
}
}
}
#include <iostream>
int main() {
bool bFlag = false;
int x = 1;
int y = 2;
if (bFlag) {
std::cout << x + y;
}
std::cout << "END";
return 0;
}
断点打在main()那里,Release方式编译,启动调试,程序运行到断点暂停了,然后选择调试——窗口——反汇编,可以看到结果:
--- f:\documents\visual studio 2017\projects\cpptest\cpptest\源.cpp -------------
bool bFlag = false;
int x = 1;
int y = 2;
if (bFlag) {
std::cout << x + y;
}
std::cout << "END";
00AF1000 mov ecx,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (0AF2048h)]
00AF1006 call std::operator<<<std::char_traits<char> > (0AF10D0h)
return 0;
00AF100B xor eax,eax
}
00AF100D ret
显然,我的程序编译以后只剩4条指令。
00AF1000和00AF1006两条就是调用std::cout << "END"
00AF100B和00AF100D两条就是return 0。