3

関数呼び出しを含むコードの一部を、すべての関数呼び出しがそれぞれのコードに置き換えられたコードに置き換えるために利用できる理論/ツールがあるかどうか疑問に思います。

お気に入り

main()
{
   fun();
}

fun()
{
   int i;
   fun2();
}

fun2()
{
   int j;
}

の中へ

main()
{
   int i;
   int j;
}

ローカル変数名、再帰呼び出し、外部関数呼び出しなど、世話をすることがたくさんあることを私は知っています。

それはまったく役に立たないかもしれないことも知っていますが、それでもこのようなものは存在しますか?理論的にも?

私はそれをプロセッサごとのアドバンスユニットと呼ぶべきです:)

4

1 に答える 1

10

コンパイラは通常、これを行うのが良い考えである場合を判断でき、必要に応じてインライン化を既に自動的に行っています。関数の前にキーワードを使用して、関数をインライン化することを提案することもできinlineます (ただし、実際にはそれを強制するわけではなく、コンパイラがインライン化を回避することを決定する可能性があることに注意してください)。通常、これを手動で行うことはあまり良い考えではありません。 、最新のコンパイラは可能な限り最適なインライン展開を自分で判断する傾向があるためです。この記事では、インライン関数について非常によく説明されていて、非常に役に立ちました。

編集1:

あなたが話しているインライン展開をしたい理由はいくつかあります。コードが多くの異なる関数に分割されているため、わかりやすさが低下し、過度に冗長になっていると思われる場合は、VAssist X Visual Studio プラグインによって提供されるツールなどのリファクタリング ツールを試すことができます。このプラグインは、あなたが提案したことを実際には実行しませんが (実行するツールは思いつきません)、関数/メソッドを簡単に移動して、コードをクリーンアップするのに役立ちます。

于 2012-06-26T16:02:56.840 に答える