默认生成的project会将编译出的函数结尾加上相似于如下的东西:c++
00412FE8 push edx 00412FE9 mov ecx,ebp 00412FEB push eax 00412FEC lea edx,[ (413000h)] 00412FF2 call @ILT+135(@_RTC_CheckStackVars@8) (41108Ch) 00412FF7 pop eax 00412FF8 pop edx 00412FF9 pop edi 00412FFA pop esi 00412FFB pop ebx 00412FFC mov esp,ebp 00412FFE pop ebp 00412FFF ret
去掉的方法以下:安全
项目-属性-c/c++ - 代码生成:函数
基本运行时检查 : 默认值code
安全检查: 禁用安全检查(/GS-)unicode
再编译出来就是干净的函数体了!编译
另外,为了兼容GCC,能够设置:属性-常规-字符集:未设置(默认:unicode)class
// 做用: 去掉函数的栈帧代码,纯属吹毛求疵:-) // 即函数开头的push ebp / mov ebp, esp和结尾的pop ebp / retn __declspec(naked) //vc2017 x64不支持,只支持x86 void main() { ...