回答編集履歴
1
加筆修正
test
CHANGED
@@ -1,11 +1,19 @@
|
|
1
|
-
main関数
|
1
|
+
要するに、main関数が複数定義されているのが問題です。
|
2
2
|
|
3
|
-
|
3
|
+
1つのファイルで1定義でも、複数のファイルをリンクする(まとめる)ときに、複数見つかってしまい、どのmain関数を実行すればよいか分からなくなるので、リンク・エラーが発生します。
|
4
|
-
|
5
|
-
main関数の中ではその関数を呼び出すだけのコードを書く。
|
6
|
-
|
7
|
-
テスト対象を切り替えるときにmain関数を書き換える。
|
8
4
|
|
9
5
|
|
10
6
|
|
7
|
+
対処法は、main関数を1つに絞ることです。
|
8
|
+
|
11
|
-
|
9
|
+
一度コンパイルしてできたコードを、リンクさせるかだけで動作を振り分けるのはすごく難しい(C++なら可能だがCでは不可能?)ので、どうしてもmain関数の書き換えは必要になります。そこで登場するのがマクロです。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
現在、calc.cの中にあるmain関数の名前を変えます(calcmainなど)。
|
14
|
+
|
15
|
+
次に、main.cの中にあるmain関数に、calcmainを呼び出すコードを書き、calc.cをテストに含める場合のみに定義するマクロ(例えば、LINKCALC_C)を利用して、ifdef/endifで囲みます。
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
この方法を利用すれば、calc.c以外にファイルを追加する際でもリンクエラーは出なくなります。
|