默認生成的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() { ...