OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

MS VC++コンパイルエラーなし...ビルドエラー

  • すぐに回答を!
  • 質問No.243447
  • 閲覧数376
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 100% (3/3)

Microsoft Visual C++ で、新規作成 - 「プロジェクト」 - Win32 Application で作成し、「ファイル」-  C++ソースファイルで、main.cpp と言う名前で、以下のソースを作成しました。

#include <stdio.h>
#include <stdlib.h>

void main(int argc)
{
FILE *Fout;
Fout = fopen("Date.ini" , "W ");
fprintf(Fout , "%d" ,argc);
fclose( Fout);
}

別に作成したdllが、fscanfするためのテキストファイルを日次ハバッチで、作成したいと思っています。
尚、ここでfprintfするデータは、パラメータとして、読み込みたいと思っています。 (Visual BASICの command関数のように)

上記のソース、コンパイルは、通るのですが、ビルドすると以下のエラーが出ます。

「LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16"は未解決です
Debug/Date_ini.exe : fatalerror LNK1120: 外部参照 1 が未解決です。
link.exe の実行エラー

解決法をご教示いただきたく思います。

宜しくお願い致します。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル13

ベストアンサー率 37% (570/1525)

Win32 ApplicationにはWinMainが必要です。
mainで作るならWin32 Console Applicationで作りましょう。
プロジェクトの再構築が無理なら、プロジェクト設定の/systemオプションを/system windowsから/system consoleに変更してください。

質問とは別の話ですが…
void main(int argc)
これはANSI-Cの規約違反です。
「mainはintの値を返し、0個または2個の引数をとる」
int main(int argc, char *argv[])
と書きましょう。
お礼コメント
sara__

お礼率 100% (3/3)

ありがとうございました。

学生のときにも、同じエラーが出た経験はあったのですが、周囲の人間にあっさり解決してもらって、解決法を全く忘れてしまっていました。

実務では、初めてC言語でプログラミングしています。

これからも、参考にさせていただきます。
ありがとうございました。
投稿日時 - 2002-03-29 17:28:38
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.2
レベル12

ベストアンサー率 39% (356/898)

#1の補足ですが、コマンドライン引数の考え方についてはもう一度参考書を読まれた方が良いと思います。 恐らくコマンドライン引数で何らかのint値を受けたいと考えていらっしゃるようですが、入力されるものといえばあくまで文字列ですからchar型ポインタでしかデータを受けられません。 main(int ac, char *av[]) とやった場合は、acは実際にいくつの引数が入力されたかカウント ...続きを読む
#1の補足ですが、コマンドライン引数の考え方についてはもう一度参考書を読まれた方が良いと思います。

恐らくコマンドライン引数で何らかのint値を受けたいと考えていらっしゃるようですが、入力されるものといえばあくまで文字列ですからchar型ポインタでしかデータを受けられません。

main(int ac, char *av[])

とやった場合は、acは実際にいくつの引数が入力されたかカウントし、avの方でデータを取り出します。

mainは暗黙的にint型です。最後にreturn 0;などして抜けるようにしまう。
補足コメント
sara__

お礼率 100% (3/3)

以下のお礼の文章、補足のところに記述すべきであったと思います。

今一度、アドバイスを宜しくお願い致します。
投稿日時 - 2002-03-29 15:59:02
お礼コメント
sara__

お礼率 100% (3/3)

ありがとうございます。

上記のアドバイス通りで、行ったところ、ビルドエラーは解決しました。

ご指摘の通り、コマンドライン引数について、あまりよく分かっていません。

もし、お薦めの参考書等がありましたら、ご紹介いただければ...と思います。

それから、今のソースのままですと、「プログラムを実行できません。」というメッセージが出てきてしまいます。

VBで、command関数を記述した場合には、バッチファイルで、*.exe %1 として、テストを行いました。

プログラムが実行できないので、exeファイルも作成できない...という状態です。

別にC言語にこだわる必要もないのですが、fprintfの部分については、C言語の方の知識があったので、Cによる実装を試みている次第です。

どうぞ、アドバイスを宜しくお願い致します。
投稿日時 - 2002-03-29 15:57:34


  • 回答No.3
レベル12

ベストアンサー率 39% (356/898)

私はVBとか他のことは全く分かりませんから、とりあえずCとして動くスタンダードなソースを書くとすると以下のようになります。 #include <stdio.h> #include <stdlib.h> int main(int ac, char *av[]) { int d; FILE *fp; if(!(fp=fopen("test& ...続きを読む
私はVBとか他のことは全く分かりませんから、とりあえずCとして動くスタンダードなソースを書くとすると以下のようになります。

#include <stdio.h>
#include <stdlib.h>

int main(int ac, char *av[])
{
int d;
FILE *fp;
if(!(fp=fopen("test","w"))){
;//オープン失敗のエラー処理を入れる
}
d=atoi(av[1]);
fprintf(fp,"%d",d);
fclose(fp);

return 0;
}

コマンドラインで取った値は配列ですからav[0]がそのプログラムの名前になり、スペースで区切って入力された文字列を[1]、[2]と取っていきます。実際にいくつ入力されたかカウントするのがacです。

参考書は好みもありますから決定的なことは言えませんが、CやC++で初心者向きということなら技術評論社から出ている塚越一雄著のものが読み進めやすいと思います。
お礼コメント
sara__

お礼率 100% (3/3)

ありがとうございました。
上記のアドバイスにより、解決しました。

「プログラムが実行できないので、exeファイルも作成できない...という状態です。」・・・という状況は、原因は、わかりませんが、新規に作成して書き直したら、解決しました。

ありがとうございました。
投稿日時 - 2002-03-29 17:25:42
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ