2

ヘッダー ファイルに 2 つのインライン関数があるとします。

inline int foo() { return bar()+2; }
inline int bar() { return 3; }

「bar」が後で宣言されたとしても、C99 コンパイラが「foo」をインライン化すると仮定できますか? function body to large のような他の内部ルールがトリガーされないと仮定します。

C99がこれをオプションとして残していても、cコンパイラの実装はこれを行っていますか(一般的なものはIntel-C/Sun Studio/MSVCおよびgccと言います)?

4

2 に答える 2

3

inlineコンパイラへの単なるヒントであり、多くの場合、最新の最適化コンパイラでは無視されます。何かがインライン化されるかどうかについては何も推測できません。一部のコンパイラは、可能であれば特定の関数を強制的にインライン化するプラグマを提供します (例: MSVC __forceinline)。絶対に知る必要がある場合は、出力の逆アセンブリを確認する必要があります。

inlineとはいえ、特定のスニペットについては、それが単一のヘッダーである限り、適切な最適化コンパイラは、有無にかかわらずインライン化します。

于 2009-11-30T05:17:27.727 に答える
3

関数が適切にプロトタイプ化されている限り、関数を宣言する順序は問題になりません。

于 2009-11-30T05:18:52.340 に答える