1. ホーム
  2. c++

[解決済み] なぜcppファイルをインクルードせず、ヘッダを使用する必要があるのですか?

2022-04-23 21:17:34

質問

そこで、初めてのC++プログラミングの課題を終え、成績を受け取りました。しかし、採点によると、私は以下の理由で点数を失いました。 including cpp files instead of compiling and linking them . その意味があまりよくわからないのですが。

自分のコードを振り返ってみると、クラスのヘッダーファイルを作らず、すべてcppファイルで行うことにしました(ヘッダーファイルがなくても問題ないようでしたが・・・)。採点者は、私がいくつかのファイルで '#include "mycppfile.cpp"' と書いたことを意味したのだと推測しています。

私の推理では #include 'cppファイルを作成することでした。 - ヘッダーファイルに入るはずのものが、すべてcppファイルの中に入っていたので、ヘッダーファイルのように見せかけた - モンキー・シー・モンキー・ドゥの要領で、他のヘッダーファイルが #include 'dをファイルに入れていたので、私のcppファイルにも同じことをしました。

では、具体的に何が悪かったのか、なぜ悪いのか?

どうすればいい?

私の知る限り、C++の標準はヘッダーファイルとソースファイルの違いを知らない。 この言語に関する限り、合法的なコードを含むテキストファイルは、他のものと同じです。 しかし、違法ではないものの、ソースファイルをプログラムに含めると、そもそもソースファイルを分離することで得られるはずだった利点がほとんどなくなってしまいます。

本来は #include プリプロセッサー の前に、指定されたファイル全体をアクティブファイルにコピーします。 コンパイラ が手に入る。 ですから、プロジェクト内のすべてのソースファイルを一緒にインクルードする場合、あなたが行ったことは、全く分離せずに1つの巨大なソースファイルを作ることと、根本的に違いがありません。

"ああ、それは大したことではありません。 動けばいいんだもん。 という声が聞こえてきそうですね。 そしてある意味、それは正しいでしょう。 しかし、今あなたは、小さな小さなプログラムと、それをコンパイルしてくれる比較的邪魔にならない素敵なCPUを相手にしているのです。 いつもそんなに幸運とは限らないのだ。

本格的なコンピュータ・プログラミングの世界に足を踏み入れると、数十行どころか数百万行に達するプロジェクトを目にすることになる。 これは膨大な行数だ。 そして、そのようなプロジェクトを最新のデスクトップコンピューターでコンパイルしようとすると、数秒どころか数時間もかかってしまうのだ。

いや~、恐ろしい話ですね。 どうしたらこの悲惨な運命を防げるのでしょうか!" 残念ながら、どうしようもないことです。 コンパイルに何時間もかかるなら、コンパイルに何時間もかかります。 しかし、それが本当に重要なのは最初の一回だけで、一度コンパイルしてしまえば、もう一度コンパイルする理由はないのです。

何かを変えない限りは。

さて、200万行のコードが1つの巨大なものにマージされたとして、次のような簡単なバグフィックスを行う必要があるとします。 x = y + 1 ということは、これをテストするために200万行をすべてコンパイルし直さなければならないことになります。 また、もしあなたが x = y - 1 その代わりに、また200万行のコンパイルが待っているのです。 これでは、他のことに使えるはずの何時間もの時間が無駄になってしまいます。

でも、非生産的なのは嫌だ! 何か方法があれば コンパイル コードベースの異なる部分を個別に、そしてどうにかして リンク を、後から一緒にするんです!"。 理論的には素晴らしいアイデアです。 しかし、あなたのプログラムが、別のファイルで何が起こっているかを知る必要がある場合はどうでしょうか? 代わりに小さな小さな.exeファイルの束を実行したいのでなければ、コードベースを完全に分離することは不可能です。

しかし、きっと可能なはずです。 そうでなければプログラミングは純粋な拷問にしか聞こえない! を分離する方法を見つけたらどうだろう? インターフェースと実装 ? 例えば、これらの異なるコードセグメントから、プログラムの残りの部分と識別するのに十分な情報を取り出し、それらをある種の ヘッダー ファイルを作成するのですか? そうすれば #include プリプロセッサーディレクティブ を使って、コンパイルに必要な情報だけを持ってくることができます!"

ふむ。 そこに何かヒントがあるかもしれませんね。 どうなるか教えてください。