5

これは、リンクされている3つの質問で構成されています。

1)どのくらい正確に複数の翻訳ユニットになりますか?確かに、すべてのソースファイルとヘッダーファイルは「結合」します。そうしないと、その「プログラム」の一部ではないコードを呼び出すコードになってしまうからです。翻訳ユニットはプログラムと同じではありませんか?

2)複数の変換ユニットに関して静的オブジェクト/クラスはどのように機能しますか?異なる翻訳単位の複数のソースファイルに、(静的データメンバーを持つ)オブジェクトを作成するヘッダーが含まれている場合、翻訳単位ごとに個別の静的データメンバーがありますか?

3)質問2と同様に、グローバル変数は複数の翻訳ユニット間で共有されますか(私が示唆しているように、それらは別々のプログラムであり、一緒にコンパイルされただけですか?)、グローバル変数は引き続き機能しますか?...すべての翻訳ユニット間でグローバルですか?

4

2 に答える 2

8

1) 各ソース ファイルは、含まれているヘッダー ファイルと共に、翻訳単位と呼ばれます。オブジェクトファイルにコンパイルされます。次に、リンカーは最終的にすべてのオブジェクト ファイルを最終的な実行可能ファイルに結合します。(単純化されていますが、基本的なアイデアを提供するため)

2) リンカーはコピーを削除します。

3) はい、2) を参照してください

于 2013-03-06T22:15:03.960 に答える
3
  1. いいえ、それらはそれぞれオブジェクト ファイルにコンパイルされ、後で一緒にリンクされます。

  2. オブジェクトが宣言されているが、ヘッダーで定義されていない場合 (これはより良い方法です)、オブジェクトが 1 つだけ定義され (実際には 1 つのソース ファイルで定義されていると仮定します)、ヘッダーをインクルードするすべての人が次の方法を使用できます。それを使ったプログラミング。

    staticそうでなければグローバル スコープにあると思われるソース ファイル内のオブジェクトは、その翻訳単位の外ではアクセスできません。クラスまたは関数の外では、staticスコープを翻訳単位に制限します。

  3. 非静的スコープのオブジェクト、はい、そうです。

于 2013-03-06T22:15:38.833 に答える