私は VS2010 を使用しています。複数のヘッダーを含むプロジェクトと、main() 関数を含む 1 つのファイルがあります。テスト目的で、元のメインとは異なるものをインスタンス化する別の main() 関数を簡単に作成できるようにしたいと考えています。2つの「メイン」機能を定義し、それらを簡単に切り替える簡単な方法はありますか? main1() で始まるバイナリと main2() で始まるバイナリの 2 つをコンパイルするのが最善の方法です。
6 に答える
ほとんどの場合、別のメインで別のコンパイル済みバイナリを使用する方がよいでしょう。
まず、「テスト目的」には、テスト ライブラリ コードなど、実際のバイナリに含まれてはならないコードが含まれる場合があります。これには、2 番目のバイナリが必要です。
第二に、省略すべきものが何もない場合でも、誰でも引数を指定したり、この機能を提供する argv[0] に一致するようにバイナリをコピーして名前を変更したりできるという問題があります。
プロジェクト ファイルを設計して、実際のプログラムとテスト プログラムを別々に作成するのは難しいかもしれませんが、ほとんどの場合、はるかに優れた結果が得られます。
「1つしか存在できない」あなたがする必要があるのは、条件付きまたは条件付きコンパイルステートメントを介してバイアスされたメインを呼び出すサブ関数のセットを作成することです。
リンカオプションには、エントリポイント名があります。このようにして、main1()とmain2()を使用できます。
http://msdn.microsoft.com/en-us/library/f9t8842e(v=vs.80).aspx
#ifdef TESTING
int main() {
/* whatever */
}
#else
int main() {
/* whatever else */
}
#endif
アプリケーションは1つしか持つことができませんmain
。2つのことを実行したい場合は、メインで次の方法で実行する必要があります。
- 実行可能ファイルの名前(ヒント:最初のargvは実行可能ファイルの名前です)
- その他のコマンドラインパラメータ(
program -thingone
) - 何かをする関数への呼び出しを怠惰にコメントアウトします。
リンカで異なるエントリ ポイントを指定するか、最上位関数であるふりをしたい下位レベル関数を呼び出す実際の main() を持つことに加えて、必要な main() ごとにプロジェクトを追加できます。
VS では、ソース コードを共有するために個別のプロジェクトがデフォルトで設定されていないため、これはやや面倒な場合があります。他の一部の IDE では、ソース コードの共有セットのさまざまなサブセットからビルドされたさまざまな実行可能ファイル (または他のビルド製品) を簡単に使用できます。しかし、VSのデフォルトを使用すると簡単だとは思いませんでした。