どうも、以前C言語を始めるにあたって、質問をさせていただいた者です。
さっそく、何が悪いのかわからなくなったので、質問させてください。
あまりにも、初歩的すぎることだとは思うのですが・・・・。
まず、あれから、色々と始める準備をし、コンパイラは、ゲームプログラミングの館にお勧めとあった「Visual C++ 2008 Express Edition」を使用しています。
PCがVISTAのため、2008にしました(オススメと書いてあったので・・・)
そのあと、ついでですので、「VisualC++用 DXライブラリ」もダウンロード&セッティングをしました。
試しに、ゲームプログラミングの館にある、以下のようなプログラムを組むと、うまく表示されます
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ;//ウィンドウモードに変更する関数
if( DxLib_Init() == -1 ) return -1;//初期化処理する関数
LoadGraphScreen( 0 , 0 , "test1.bmp" , TRUE ) ;//画像を表示する関数
WaitKey() ;//何か入力があるまで待つ関数
DxLib_End() ;//終了処理をする関数
return 0 ;
}
それで、安心して、C言語の基礎を学ぼうと、とあるサイトにあるものを実践していこうと思ったのですが、うまくビルドできません。。。
内容は、以下のようなものです。
#include <stdio.h>
void main(void)
{
printf("0からのC言語\n");
}
初めはただ、スペルミスかと思って、サイトのをコピペしたのですが、それでもエラーが起きます。
サイトが悪いのかと思い、違うサイトで、似たようなコードを入力しても、同じようにエラーが起きます。
何が、いけないんでしょうか・・・・・?
ちなみに、エラー内容は以下のようになっています。
1>------ ビルド開始: プロジェクト: aa, 構成: Debug Win32 ------
1>コンパイルしています...
1>qa.cpp
1>リンクしています...
1>LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
1>C:\*****\***\*******\Visual Studio 2008\Projects\aa\Debug\aa.exe : fatal error LNK1120: 外部参照 1 が未解決です。
1>ビルドログは "file://c:\******\***\*******\Visual Studio 2008\Projects\aa\Debug\BuildLog.htm" に保存されました。
1>aa - エラー 2、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
***の部分は、ファイル名で、一応伏せさせて頂きました。
どなたか、わかる方、ご教授の方お願致します。
えと、習う立場で申し訳ないのですが、始めたばかりで無知なので、わかりやすくお願致します。
初歩的なビルドエラーだとは思いますが。
Re:初歩的なビルドエラーだとは思いますが。
>1>LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
コンソール・アプリケーションを作成しようとしているのに、
コンパイル・オプションがWindowsアプリケーション用であるため
だと思います。
コンソール・アプリケーションを作成しようとしているのに、
コンパイル・オプションがWindowsアプリケーション用であるため
だと思います。
ありがとうございます!
>Boxさん
お答え、ありがとうございます。
アプリケーションが違かったのですね・・・。
教えていただいたとおり、コンソール・アプリケーションにしたら、うまく実行されました。
ようやく、次に進めます。
本当にありがとうございました。
一応、メインの質問は解決しましたので、解決マークをつけさえて頂きますが、こうなるとコンソール・アプリケーションと、Windowsアプリケーションって、使う用途が違うということですよね?
えー・・・そういう箇所って、参考書や、サイトには載ってないみたいなので、こっそり教えて頂けるとありがたいです^^;
簡潔でいいので・・・。
お答え、ありがとうございます。
アプリケーションが違かったのですね・・・。
教えていただいたとおり、コンソール・アプリケーションにしたら、うまく実行されました。
ようやく、次に進めます。
本当にありがとうございました。
一応、メインの質問は解決しましたので、解決マークをつけさえて頂きますが、こうなるとコンソール・アプリケーションと、Windowsアプリケーションって、使う用途が違うということですよね?
えー・・・そういう箇所って、参考書や、サイトには載ってないみたいなので、こっそり教えて頂けるとありがたいです^^;
簡潔でいいので・・・。
Re:初歩的なビルドエラーだとは思いますが。
アプリケーションは大きく分けてWindowsアプリケーションとコンソールアプリケーションに分かれます。
Windowsアプリケーションは、実行するとWindowsが表示されてその中に文字や画像などさまざまなものが
表示したり操作したり出来るソフトです。
一方、コンソールアプリケーションはコマンドライン上から実行できるソフトで、基本的に文字やデータ
の入出力しか出来ません。
Windowsでは、WindowsアプリケーションはWinMain関数から開始し、コンソールアプリケーションは
main関数から開始すると決まっています。
Visual Studioでは、このどちらを選択するかはプロジェクトを作成する段階で決定します。
サンプルプロジェクトは、全てWindowsアプリケーションで作成されているため、main関数から始まる
コンソールアプリケーションのソースに書き換えてもコンパイルに失敗します。
コンソールアプリケーション用プロジェクトの作り方
VC++2008EEを起動
ファイル→新規作成→プロジェクトを選択
Win32コンソールアプリケーションを選択してOKを押す(プロジェクト名などは適当に)
次へを選択
追加のオプションで空のプロジェクトをチェックしてから完了を選択
新規作成→ファイルを選択
CPPファイルを選んで開くを選択
開いたファイルにソースコードを書いてください
Windowsアプリケーションは、実行するとWindowsが表示されてその中に文字や画像などさまざまなものが
表示したり操作したり出来るソフトです。
一方、コンソールアプリケーションはコマンドライン上から実行できるソフトで、基本的に文字やデータ
の入出力しか出来ません。
Windowsでは、WindowsアプリケーションはWinMain関数から開始し、コンソールアプリケーションは
main関数から開始すると決まっています。
Visual Studioでは、このどちらを選択するかはプロジェクトを作成する段階で決定します。
サンプルプロジェクトは、全てWindowsアプリケーションで作成されているため、main関数から始まる
コンソールアプリケーションのソースに書き換えてもコンパイルに失敗します。
コンソールアプリケーション用プロジェクトの作り方
VC++2008EEを起動
ファイル→新規作成→プロジェクトを選択
Win32コンソールアプリケーションを選択してOKを押す(プロジェクト名などは適当に)
次へを選択
追加のオプションで空のプロジェクトをチェックしてから完了を選択
新規作成→ファイルを選択
CPPファイルを選んで開くを選択
開いたファイルにソースコードを書いてください
お答えありがとうございます!
>Mistさん
お答えありがとうございます。
関数が違うんですね。
未だに、ああ、そういうこと?っというような、明確な理解はありませんが、初心者ながら少しは理解できました。
コンソールアプリケーションとWindowsアプリケーションの違いも知りたかったので、御答はすごく参考になりました。
ありがとうございます。
今後も、何かありましたら、よろしくお願致します。
お答えありがとうございます。
関数が違うんですね。
未だに、ああ、そういうこと?っというような、明確な理解はありませんが、初心者ながら少しは理解できました。
コンソールアプリケーションとWindowsアプリケーションの違いも知りたかったので、御答はすごく参考になりました。
ありがとうございます。
今後も、何かありましたら、よろしくお願致します。