後で宣言されたC参照エンティティの関数本体をインライン化できます
質問
ヘッダーファイルに2つのインライン関数があるとしましょう:
inline int foo() { return bar()+2; }
inline int bar() { return 3; }
C99コンパイラが" foo"をインライン化すると仮定できますか? 「bar」が後で宣言されたとしても? 関数本体のような他の内部ルールがトリガーされないと仮定します。
C99がオプションとして残している場合でも、これを行うcコンパイラの実装(一般的なものはIntel-C / Sun Studio / MSVCおよびgccと言いますか)
解決
関数が適切にプロトタイプ化されている限り、どの順序で宣言するかは重要ではありません。
他のヒント
inline
はコンパイラへの単なるヒントであり、多くの場合、最新の最適化コンパイラでは無視されます。何かがインライン化されるかどうかについては何も想定できません。一部のコンパイラーは、可能な限り特定の関数をインライン化するプラグマを提供します(例:MSVC __ forceinline
)。どうしても知る必要がある場合は、出力の逆アセンブリを調べる必要があります。
とはいえ、特定のスニペットに対して、適切な最適化コンパイラは、単一のヘッダーである限り、 inline
を使用して、または使用せずにインライン化します。
所属していません StackOverflow