C ++レッスン6 - インライン関数解析

この記事では、C ++コースのDitaiソフトウェア・カレッジTangzuo林先生から学びます


導入:Cマクロ機能ブロックを置換するためにC ++インライン関数を導入されています

実験1:VSマクロブロックインライン

注意:在C++开发中首选内联函数定义代码块,而不是宏

実験2:強制インライン


C言語マクロ定数テキストキーは、副作用として、あるいは前処理の間に実行され、任意の構文チェック、型チェックを行いません。だから、constキーワードのためのC ++で定数が定義されてCONST、アップグレードされましたが、我々はマクロ定数を使用する場合はそのC ++で、私たちが直接与えられたのconst使用することができ、真の意味での定数ではなく、読み取り専用変数となっていますマクロ定数を交換する定数。さらに、我々はCのマクロブロックを設定することができ、そう頻繁に副作用で、マクロブロックを使用して、関数の関数であるように見えますが、ありません。C ++でのソリューションを提供し、マクロブロックは、C -----インライン関数を置き換えられています
ここに画像を挿入説明

ここに画像を挿入説明

ここに画像を挿入説明

C ++コンパイラは、要求インライン関数を満たしていない場合は、インライン関数は通常の関数となり、プッシュもあり、返品、その他の費用、ジャンプします。

実験1:VSマクロブロックインライン

#include <stdio.h>

#define FUNC(a, b) ((a) < (b) ? (a) : (b))

inline int func(int a, int b)
{
    return a < b ? a : b;
}

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 3;
    int c = FUNC(++a, b);
    
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);
    
    return 0;
}


mhr@ubuntu:~/work/c++$ g++ 6-1.cpp 
mhr@ubuntu:~/work/c++$ ./a.out 
a = 3
b = 3
c = 3
mhr@ubuntu:~/work/c++$ 




#include <stdio.h>

#define FUNC(a, b) ((a) < (b) ? (a) : (b))

inline int func(int a, int b)
{
    return a < b ? a : b;
}

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 3;
    int c = func(++a, b);
    
    printf("a = %d\n", a);
    printf("b = %d\n", b);
    printf("c = %d\n", c);
    
    return 0;
}

mhr@ubuntu:~/work/c++$ g++ 6-1.cpp 
mhr@ubuntu:~/work/c++$ ./a.out 
a = 2
b = 3
c = 2
mhr@ubuntu:~/work/c++$ 

ここに画像を挿入説明

ここに画像を挿入説明
属性 G ++コンパイラ、キーワードではなく、標準C ++の構文がサポートさよりに比べて()。しかし、特別なG ++コンパイラがサポートするもの。

実験2:強制インライン

#include <stdio.h>

//__forceinline
__attribute__((always_inline))
inline 
int add_inline(int n);

int main(int argc, char *argv[])
{
    int r = add_inline(10);

    printf(" r = %d\n", r);

    return 0;
}

inline int add_inline(int n)
{
    int ret = 0;

    for(int i=0; i<n; i++)
    {
        ret += i;
    }

    return ret;
}


mhr@ubuntu:~/work/c++$ g++ 6-2.cpp 
\mhr@ubuntu:~/work/c++$ 
mhr@ubuntu:~/work/c++$ 
mhr@ubuntu:~/work/c++$ ./a.out 
 r = 45
mhr@ubuntu:~/work/c++$ 
mhr@ubuntu:~/work/c++$ 

ここに画像を挿入説明

ここに画像を挿入説明

公開された200元の記事 ウォンの賞賛100 ・は 80000 +を見て

おすすめ

転載: blog.csdn.net/LinuxArmbiggod/article/details/104087366