37

と通常のstatic inline関数の違いは何ですか?extern inlineinline

私はこれについていくつかのあいまいな説明を見てきました。私が理解している限り、キーワードが通常意味するように、特定のファイル内でのみ参照されることを意図した単なる関数でstatic inlineはありません。変数と同じ説明ではないと思います。どんな答えでも大歓迎です!inlinestaticextern inlineextern

4

1 に答える 1

33

を含む関数定義static inlineは、内部リンケージを持つインライン関数を定義します。このような関数は、これらの修飾子の「通常の」プロパティから「期待どおり」に機能します。static内部リンケージを与え、inlineインラインにします。したがって、この関数は翻訳単位に対して「ローカル」であり、その中でインライン化されます。

inline外部リンケージを持つインライン関数を定義するだけの関数定義。ただし、そのような定義はインライン定義と呼ばれ、その関数の外部定義としては機能しません。つまり、この関数には外部リンケージがありますが、別の外部定義をどこかに提供しない限り、他の翻訳単位からは未定義と見なされます。

を使用した関数定義extern inlineは、外部リンケージを使用してインライン関数を定義すると同時に、この定義がこの関数の外部定義として機能します。このような関数は、他の翻訳単位から呼び出すことができます。

extern inline最後の 2 つのパラグラフは、外部リンケージを持つインライン関数に対して単一の定義を提供するか、2 つの別個の定義 ( oneinlineと other ) を提供するかを選択できることを意味しますextern。後者の場合、関数を呼び出すと、コンパイラは 2 つの定義のいずれかを選択できます。

于 2014-07-28T17:34:23.880 に答える