複数の C++ ソース コード ファイルを 1 つのプロジェクトに組み込むにはどうすればよいですか?
Mad Libs TMプログラムを作ろうとしています。コードを複数のソース ファイルに分割し、特定の Mad Lib を再生したいときに 1 つのみ実行したいと考えています。
複数の C++ ソース コード ファイルを 1 つのプロジェクトに組み込むにはどうすればよいですか?
Mad Libs TMプログラムを作ろうとしています。コードを複数のソース ファイルに分割し、特定の Mad Lib を再生したいときに 1 つのみ実行したいと考えています。
モデルの完全な再設計を提案する場合があります。プログラミングは初めてなので、このようなプロジェクトから学ぶことができる重要なアイデアを見つけながら、シンプルに保つようにします。
各 Mad Lib TMは個別の C++ ファイルです。これらのファイルは互いにリンクされており、ユーザーまたはランダムな入力に基づいて、1 つのドライバー プログラムが実行するファイルを決定します。
問題:
コードの繰り返しが多い。
たとえば、個別のファイルのそれぞれに、ユーザー入力、Mad Lib の構築、および Mad Lib の表示を処理するためのコードが必要です。これは、共通コードを別のライブラリに抽象化してリンクすることで解決できますが、もっと良い方法があります。さらに、Mad Lib のスペル ミスを修正するなどの簡単なことを行う必要がある場合は、プログラム全体を再コンパイルする必要があります。
多くの散在する依存関係。
たとえば、ユーザー入力の処理方法を変更する必要がある場合は、すべての Mad Lib プログラムを変更する必要があります。新しい Mad Lib を追加する必要がある場合は、まったく新しいプログラム/関数を作成する必要があります。また、他の誰かが MadLib に貢献したい場合は、特定のガイドラインに従う必要があります (あなたが作成した場合を除く)。
デバッグは悪夢です。
デバッグが必要な場合は、問題について多くの異なるソース ファイルをふるいにかける必要があります。これは、すべてのファイルでも発生する可能性があります。
そこで、小規模プロジェクトの範囲内でこのモデルを修正しましょう。
上記の問題をすべて解決する非常に簡単な解決策があります。
プログラム ロジックから Mad Lib データを抽象化します。
このモデルには、C++ で記述された 1 つのドライバー プログラムがあります。この MadLibs ドライバーは、外部ソース (おそらくテキスト ファイル) から MadLib を読み込みます。これで、すべてのプログラム ロジックが 1 か所にまとめられ、実際の MadLib コンテンツとは区別されます。
このプログラムは簡単に実装できます。ファイルを単語ごとに (またはトークンごとに、「 」を参照strtok
) 読み取り、完成した出力 Mad Lib に単語を書き込むだけです。空白が見つかるたびに、要求された文法構造に準拠した単語をユーザーに入力するように求めます。
空白のフォーマットを指定する必要があります。#noun#や@verbなどで問題ありません。
ここで、たとえば、ユーザーにプロンプトを表示するロジックを別の C++ ファイルに入れることにした場合は、プリプロセッサディレクティブを使用して単純に含めることができます。
#include "path/to/file.h"
ファイルが同じディレクトリにある場合は、ファイル名だけが必要です。これを行う場合、最初に実際のfile.cppファイルをオブジェクト形式にコンパイルして、リンカーが見つけられるようにする必要がある場合があります。これは次の方法で実行できます。
g++ -c file.cpp
次に、アプリケーションの残りの部分を通常どおりコンパイルします。
私の提案に従えば、最新のプログラミング手法の理解に向けて大きく前進できるでしょう。より大きなプロジェクトに移行すると、すべてのデータ (「内部」文字列を含む) が個別のファイルに取り出され、プログラム ロジックがコンテンツから分離されていることがわかります。さらに、共通コードは、共有ライブラリまたはアプリケーション スタティック ライブラリにまとめられます。これにより、次のことが可能になります。
これがあなたの質問に完全に答えるかどうかは疑問ですが、あなたの質問の詳細レベルが低いことを考えると、他にできることはあまりありません.