C言語を使用すると、ソースファイルを先読みせずに1回のパスで読み取ることができます。どの時点でも、コンパイラは、ファイル内の現在の位置の前に表示された宣言、プロトタイプ、マクロ定義などを考慮するだけで済みます。
これは、関数呼び出しをインライン化するために、コンパイラーが呼び出しの前に関数を定義する必要がある可能性があることを意味しますか?例えば:
int foo(void);
int bar(void) { return foo(); }
inline int foo(void) { return 42; }
foo
インライン定義がの定義の前に移動された場合、への呼び出しはインライン化される可能性が高くなりbar
ますか?
コード内でインライン定義を配置して、インライン化するのが最適な呼び出しの前に表示されるようにする必要がありますか?または、インライン化を行うのに十分な高度な最適化コンパイラが、呼び出し後に定義が表示された場合でも(gccの場合のように)定義を見つけることができると仮定できますか?
編集:オプション付きのPelles C/Ob1
では、呼び出しをインライン化する前に、定義を表示する必要があることに気付きました。コンパイラーは、この制限を取り除くオプションも提供し/Ob2
ます(また、gccと同様に、コンパイラーがインライン指定子なしで関数をインライン化できるようにします)が、ドキュメントには、この2番目のオプションを使用するとはるかに多くのメモリーが必要になる可能性があると記載されています。