回答編集履歴

1

加筆修正

2017/01/25 02:57

投稿

majiponi
majiponi

スコア1720

test CHANGED
@@ -1,11 +1,19 @@
1
- main関数をテスト対象ファイルから分離
1
+ 要するに、main関数が複数定義されているが問題です。
2
2
 
3
- 現在テスト対象あるmain関数はtest1main名前をつける
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以外にファイルを追加する際でもリンクエラーは出なくなります。