ホームページ >バックエンド開発 >C++ >C と C の「inline」、「static inline」、「extern inline」の違いは何ですか?

C と C の「inline」、「static inline」、「extern inline」の違いは何ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-24 17:51:11268ブラウズ

What's the Difference Between `inline`, `static inline`, and `extern inline` in C and C  ?

extern inline について

C プログラミング言語では、インライン関数は、関数本体を直接挿入することでコードを最適化できる可能性があるというヒントをコンパイラーに提供します。別のサブルーチンを生成するのではなく、呼び出し時点でcall.

インライン バリエーションの違い

K&R C と C89 では、インラインの標準セマンティクスはありませんでしたが、多くのコンパイラーがさまざまな解釈でインラインをサポートしていました。 GCC では、inline、static inline、extern inline の 3 つのバリエーションが導入されました。

  • inline: インライン最適化を提案しますが、アウトオブライン バージョンも生成されます。コンパイル単位全体で存在できる定義は 1 つだけです。
  • extern inline: インラインと似ていますが、アウトオブライン バージョンは生成されません。ただし、別のコンパイル単位に存在する必要があるアウトオブライン バージョンの呼び出しが行われる可能性があります。
  • static inline: file-static を生成しますが、外部からは見えません。インラインバージョン。アウトオブライン バージョンは生成されません。

C99 と GNU99

C99 では、extern inline のセマンティクスが GNU89 のインライン動作を反映するように改訂されました。インラインと静的インラインは同じままでした。

C

C では、インライン関数は使用されるすべての場所で同じ定義を持つ必要があります。同じシンボルの複数の定義は、コンパイラ/リンカによって処理されます。 static inline も extern inline も C では定義されていませんが、一部のコンパイラはそれらをサポートしている可能性があります。

extern inline によるインライン化の確保

インライン化が必要な特定のシナリオFILELINE を使用する関数の場合マクロの場合、extern inline は関数がインライン化されることを保証しません。ただし、これは、この望ましい動作を実現するのに最も近い C99 と同等です。関数がインライン化されない場合、コンパイラーまたはリンカーはエラーを発行する可能性があります。

コンパイラーとベンダーの違い

コンパイラーのベンダーやバージョンが異なると動作が異なる場合があります。ご使用の環境に応じた特定のドキュメントを参照することを常にお勧めします。

以上がC と C の「inline」、「static inline」、「extern inline」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。