0

ヘッダー ファイルの目的が見つかりません。なぜそれが必要なのですか?C# にはヘッダーがなく、「using」と書くだけです。

また、ヘッダー ファイルと cpp ファイルの違いは何ですか?

ありがとう。

4

4 に答える 4

3

誰も話していない「ヘッダー ファイルの目的は何ですか」という部分に答えると、メソッド定義を実際の実装から分離することで、メソッドの実装を変更するときに、コンパイラがプロジェクト内のすべてのファイルを再コンパイルしないようにすることができます。 .

これは、それを呼び出すファイルが同じ方法で呼び出すためです (これはヘッダーで定義されています)。実装が (cpp ファイルで) 変更された場合、コンパイラは変更されたファイルのみをコンパイルし、リンクを再度実行します。したがって、大きなプロジェクトに取り組む際に多くの時間を節約できます。

于 2012-09-27T22:07:52.150 に答える
1

C# コンパイラのしくみとヘッダーが不要な理由を説明している次の記事をご覧ください。

于 2012-09-27T21:57:34.917 に答える
0

.NET、C#、および IL について理解を深める必要があります。「using」ディレクティブほど単純ではありません。ILは循環依存の問題に悩まされており、私の最後の知識によると、Microsoftは循環依存を解決するためにいくつかの巧妙なハックを試みていましたが、どれも完璧ではありませんでした.

卒業して大規模なプロジェクトに進むと、循環依存の問題に遭遇するかもしれません。それまでは、CPP/HPP の区別が循環依存を回避するのに役立つことを覚えておいてください...

于 2012-09-27T22:21:20.927 に答える
0

私の知る限り、違いはありません。ヘッダーなしでいつでもコードを書くことができます。

a.cpp

class A {
public:
   void foo();
};

void A::foo() {}

b.cpp

class A {
public:
   void foo();
};

int main() { A a; a.foo(); }

ただし、各翻訳単位 (.cpp) に記述する必要がある一般的な定義にヘッダー ファイルを使用する方が簡単で便利で、エラーが少なくなります。

ああ

class A {
public:
   void foo();
};

a.cpp

#include "a.h"
void A::foo() {}

b.cpp

#include "a.h"

int main() { A a; a.foo(); }

もちろん、.cpp ファイルのみをコンパイルします。ただし、ヘッダーには「プリコンパイル」があります。


なぜ C# はヘッダーを必要としないのですか? 私はそれをかなり異なって見ています。C# では、ヘッダーのみがありusing、 C++ と同等ですinclude。しかし、これは私の個人的な意見です:D

于 2012-09-27T22:01:22.943 に答える