huhuhu12138 发表于 2018-1-3 23:20:10

这个程序用内联函数用的对吗

#include<iostream>
using namespace std;
int sorting(int a,int b,int c);
int main()
{
    int a=21,b=15,c=22;
    sorting(a,b,c);
    cout<<sorting(a,b,c);
    return 0;
}
inline int sorting(int a,int b,int c)
{
    if(a>b&&a>c) return a;
    if(b>a&&b>c) return b;
    if(c>a&&c>b) return c;
}内联函数正确使用了吗?

人造人 发表于 2018-1-4 00:13:46

有没有内联,需要看反汇编代码才知道
即使是加了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
00401776 3B 45 EC             cmp         eax,dword ptr
00401779 7E 13                jle         main+4Eh (040178Eh)
0040177B 8B 4D F8             mov         ecx,dword ptr
0040177E 3B 4D E0             cmp         ecx,dword ptr
00401781 7E 0B                jle         main+4Eh (040178Eh)
00401783 8B 55 F8             mov         edx,dword ptr
00401786 89 95 14 FF FF FF    mov         dword ptr ,edx
0040178C EB 24                jmp         main+72h (04017B2h)
0040178E 8B 45 EC             mov         eax,dword ptr
00401791 3B 45 F8             cmp         eax,dword ptr
00401794 7E 13                jle         main+69h (04017A9h)
00401796 8B 4D EC             mov         ecx,dword ptr
00401799 3B 4D E0             cmp         ecx,dword ptr
0040179C 7E 0B                jle         main+69h (04017A9h)
0040179E 8B 55 EC             mov         edx,dword ptr
004017A1 89 95 14 FF FF FF    mov         dword ptr ,edx
004017A7 EB 09                jmp         main+72h (04017B2h)
004017A9 8B 45 E0             mov         eax,dword ptr
004017AC 89 85 14 FF FF FF    mov         dword ptr ,eax
004017B2 8B F4                mov         esi,esp
004017B4 8B 8D 14 FF FF FF    mov         ecx,dword ptr
004017BA 51                   push      ecx
004017BB 8B 0D 98 A0 40 00    mov         ecx,dword ptr
004017C1 FF 15 9C A0 40 00    call      dword ptr
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
00C71E26 50                   push      eax
00C71E27 8B 4D EC             mov         ecx,dword ptr
00C71E2A 51                   push      ecx
00C71E2B 8B 55 F8             mov         edx,dword ptr
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
00C71E40 FF 15 9C A0 C7 00    call      dword ptr
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”: 不是所有的控件路径都返回值

开内联时就没有警告
^_^


人造人 发表于 2018-1-4 00:17:17

代码编译时,没有警告(开内联)
#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 = 50;

        cout << sorting(a, b, c);

        return 0;
}


输出
-858993460请按任意键继续. . .
页: [1]
查看完整版本: 这个程序用内联函数用的对吗