質問したいことがあるのですが
C言語のコンパイラとしてvisual C++ を使っているのですが、1つのソースファイルの中に複数の.cファイルを作成すると

1>------ ビルド開始: プロジェクト: C言語, 構成: Debug Win32 ------
1>コンパイルしています...
1>sample.c
1>c:\users\太郎\documents\visual studio 2008\projects\c言語\c言語\sample.c(105) : warning C4101: 's3' : ローカル変数は 1 度も使われていません。
1>c:\users\太郎\documents\visual studio 2008\projects\c言語\c言語\sample.c(105) : warning C4101: 's2' : ローカル変数は 1 度も使われていません。
1>リンクしています...
1>sample2.obj : error LNK2005: _main は既に sample.obj で定義されています。
1>C:\Users\太郎\Documents\Visual Studio 2008\Projects\C言語\Debug\C言語.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
1>ビルドログは "file://c:\Users\太郎\Documents\Visual Studio 2008\Projects\C言語\C言語\Debug\BuildLog.htm" に保存されました。
1>C言語 - エラー 2、警告 2
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

と表示されてうまく実行することができません。
一応私なりに調べて
プロジェクト→C言語のプロパティ→生成コード→DLL
で回避されると書いてあったんですがいくらその設定にしても何の問題も解決されません。
どうしたらいいですか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

>1つの実行ファイル中にmain()は1つしか存在できません。


と書きましたが…main()だけとは限りませんので注意。

プロジェクトのソースが
main.c/source1.c/source2.cとあって、
それぞれにfunc()という関数を定義した場合、衝突してリンクできなくなる場合があります。

# クラスに分けていて名前空間が衝突していないとかstaticでファイル内スコープに限定するとかであれば衝突しなくて済みますが…。
# そのあたりはもっと詳しい方からの回答に期待…。
    • good
    • 0

1つの実行ファイル中にmain()は1つしか存在できません。


別々のプロジェクトを作成して、別々のexeファイルになるようにしてください。

よって…
>プロジェクト→C言語のプロパティ→生成コード→DLL
>で回避されると書いてあったんですがいくらその設定にしても何の問題も解決されません。
こんなのでは回避できません。

http://www.google.co.jp/search?hl=ja&num=30&q=%2 …

複数のソースファイルに分割して、分割コンパイルを行うのであればリンク時に
>1>sample2.obj : error LNK2005: _main は既に sample.obj で定義されています。
なんてのは出ません。

# ソリューションの設定なども絡んだりするので…ソリューションごと新しく作る。という方が気楽かも知れません。
# スタートアッププロジェクトとか……。

分割コンパイルについてはこちら。
http://www.google.co.jp/search?hl=ja&num=30&q=%E …
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング