有没有内联,需要看反汇编代码才知道
即使是加了inline,没有打开编译选项也不行
同一段代码#include<iostream>
using namespace std;
inline int sorting(int a, int b, int c)
{
if((a > b) && (a > c)) return a;
if((b > a) && (b > c)) return b;
return c;
}
int main(void)
{
int a = 10, b = 20, c = 30;
cout << sorting(a, b, c);
return 0;
}
开内联 cout << sorting(a, b, c);
00401773 8B 45 F8 mov eax,dword ptr [a]
00401776 3B 45 EC cmp eax,dword ptr [b]
00401779 7E 13 jle main+4Eh (040178Eh)
0040177B 8B 4D F8 mov ecx,dword ptr [a]
0040177E 3B 4D E0 cmp ecx,dword ptr [c]
00401781 7E 0B jle main+4Eh (040178Eh)
00401783 8B 55 F8 mov edx,dword ptr [a]
00401786 89 95 14 FF FF FF mov dword ptr [ebp-0ECh],edx
0040178C EB 24 jmp main+72h (04017B2h)
0040178E 8B 45 EC mov eax,dword ptr [b]
00401791 3B 45 F8 cmp eax,dword ptr [a]
00401794 7E 13 jle main+69h (04017A9h)
00401796 8B 4D EC mov ecx,dword ptr [b]
00401799 3B 4D E0 cmp ecx,dword ptr [c]
0040179C 7E 0B jle main+69h (04017A9h)
0040179E 8B 55 EC mov edx,dword ptr [b]
004017A1 89 95 14 FF FF FF mov dword ptr [ebp-0ECh],edx
004017A7 EB 09 jmp main+72h (04017B2h)
004017A9 8B 45 E0 mov eax,dword ptr [c]
004017AC 89 85 14 FF FF FF mov dword ptr [ebp-0ECh],eax
004017B2 8B F4 mov esi,esp
004017B4 8B 8D 14 FF FF FF mov ecx,dword ptr [ebp-0ECh]
004017BA 51 push ecx
004017BB 8B 0D 98 A0 40 00 mov ecx,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (040A098h)]
004017C1 FF 15 9C A0 40 00 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (040A09Ch)]
004017C7 3B F4 cmp esi,esp
004017C9 E8 54 F9 FF FF call __RTC_CheckEsp (0401122h)
关内联 cout << sorting(a, b, c);
00C71E23 8B 45 E0 mov eax,dword ptr [c]
00C71E26 50 push eax
00C71E27 8B 4D EC mov ecx,dword ptr [b]
00C71E2A 51 push ecx
00C71E2B 8B 55 F8 mov edx,dword ptr [a]
00C71E2E 52 push edx
00C71E2F E8 3C F5 FF FF call sorting (0C71370h)
00C71E34 83 C4 0C add esp,0Ch
00C71E37 8B F4 mov esi,esp
00C71E39 50 push eax
00C71E3A 8B 0D 98 A0 C7 00 mov ecx,dword ptr [_imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A (0C7A098h)]
00C71E40 FF 15 9C A0 C7 00 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (0C7A09Ch)]
00C71E46 3B F4 cmp esi,esp
00C71E48 E8 D5 F2 FF FF call __RTC_CheckEsp (0C71122h)
另外,我还发现了一个比较有趣的问题
在开内联时,有一些编译警告会失效(应该是一些,不是全部)
例如#include<iostream>
using namespace std;
inline int sorting(int a, int b, int c)
{
if((a > b) && (a > c)) return a;
if((b > a) && (b > c)) return b;
//return c;
}
int main(void)
{
int a = 10, b = 20, c = 30;
cout << sorting(a, b, c);
return 0;
}
关内联时
编译有一个警告warning C4715: “sorting”: 不是所有的控件路径都返回值
开内联时就没有警告
^_^
|