ページ 11

time_tを使ったソースをコンパイルできません

Posted: 2013年5月07日(火) 20:32
by miyasan_tora
初めて投稿させていただき、利用法も判りません。皆様よろしくお願いします。
[1] 質問文
[1.1] 自分が今行いたい事は何か
time_t を使ったソースをコンパイルしたいです。
[1.2] どのように取り組んだか(プログラムコードがある場合記載)
プロジェクトの設定を次のようにしました。
プロジェクトのプロパティで「構成プロパティ」→「全般」
→「文字セット」→「マルチバイト文字セットを使用する」

コード:

#include <stdio.h>
#include <conio.h>
#include <time.h>

void main(){
	time_t t1, t2;
	t1=time(NULL);
	t2=time(NULL);
	printf("計時スタート の何かキーを押してください\n");
	_getch();
	time(&t1);
	printf("計時終了 の何かキーを押してください\n");
	_getch();
	time(&t2);
	printf("\n t1 = %ld t2 = %ld\n", t1, t2);
	printf("かかった時間は、%d 秒です。\n", t2 - t1);
	return;
}
[1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)

エラー 1 error LNK2019: 未解決の外部シンボル _WinMain@16 が
関数 ___tmainCRTStartup で参照されました。
エラー 2 error LNK1120: 1 件の未解決の外部参照
[1.4] 今何がわからないのか、知りたいのか
Visual C++ 2012 Expressのcppファイルに入れたソースを
どのように修正したらコンパイルできるか知りたいです。
[2] 環境  
[2.1] OS :Windows7 32bit
[2.2] コンパイラ名 :
Visual Studio 2012 Express for Windows Desktop
[3] その他
 ・どの程度C言語を理解しているか→今週始めました。全く知りません。
「猫でもわかるプログラミング」のC言語編第1部の一章から始めました。
13章で躓いております。
 ・ライブラリを使っている場合は何を使っているか→意味がわかりません。
よろしくお願いします。

Re: time_tを使ったソースをコンパイルできません

Posted: 2013年5月07日(火) 21:23
by nil
プロジェクト作成の時にウィンドウズアプリケーションに設定したのではありませんか?
もう一回コンソールアプリケーションでプロジェクトを作成しなおしてみてください。

Re: time_tを使ったソースをコンパイルできません

Posted: 2013年5月07日(火) 21:25
by softya(ソフト屋)
プロジェクトの作り方を間違っている様です。
「太田研究室 > Visual C++ 2010 Express プログラミング入門」
http://cvwww.ee.ous.ac.jp/vc10prog.html
2012でも同じだと思うので、こちらを参考にしてください。

Re: time_tを使ったソースをコンパイルできません

Posted: 2013年5月07日(火) 22:47
by miyasan_tora
涼雅さん、softyaさん、早速教えていただきありがとうございました。
ご指摘の通り、コンソールで実行したらOKでした。
ソースファイルがcppなのになぜコンソールなのか、
その辺はまださっぱり判りません。
体で覚えろ!と書いてあるのでとにかくこつこつやってみます。
また、教えてください。
ありがとうございました。

Re: time_tを使ったソースをコンパイルできません

Posted: 2013年5月07日(火) 22:54
by box
miyasan_tora さんが書きました: ソースファイルがcppなのになぜコンソールなのか、
その辺はまださっぱり判りません。
ソースファイルの拡張子がcpp(つまりC++言語のソース)であることと、
作りたいプログラムがコンソールアプリケーションであるかどうかとは、別次元の話です。

1)ソースファイルの拡張子がc(つまりC言語のソース)で、作りたいプログラムがコンソールアプリケーション
2)ソースファイルの拡張子がc(つまりC言語のソース)で、作りたいプログラムがWindowsアプリケーション
3)ソースファイルの拡張子がcpp(つまりC++言語のソース)で、作りたいプログラムがコンソールアプリケーション
4)ソースファイルの拡張子がcpp(つまりC++言語のソース)で、作りたいプログラムがWindowsアプリケーション

全部あり得ます。

Re: time_tを使ったソースをコンパイルできません

Posted: 2013年5月07日(火) 23:29
by softya(ソフト屋)
cppはファイルの拡張子ですのが、ソースコードを書くところだよって意味でしかありません。
一般的にはC++のソースコードを記述しますが、C言語のコードを書いても構いません。

コンソール・アプリなのかウィンドウ・アプリなのかは別の要素で決まります。
それがプロジェクトの設定であり、このプロジェクトの設定次第で変わってしまうものなのです。
実際にはもっと複雑で、1つのアプリでウィンドウモードとコンソールモードを切り替える事も可能です。
そこら辺はもっと勉強して仕組みがわかってからで良いと思います。

Re: time_tを使ったソースをコンパイルできません

Posted: 2013年5月08日(水) 06:23
by YuO
softya(ソフト屋) さんが書きました:cppはファイルの拡張子ですのが、ソースコードを書くところだよって意味でしかありません。
一般的にはC++のソースコードを記述しますが、C言語のコードを書いても構いません。
Visual C++ (Visual Studio) は拡張子でファイルの種類(CなのかC++なのかリソースなのかetc.)を判別しているので,これだけだと誤解するかもしれませんね。

Visual C++においては,/Tcまたは/TC コンパイラオプションをコンパイラであるclに渡すことで,.c以外の拡張子を持つファイルをCのソースファイルとしてコンパイルできます。
また,/Tpまたは/TP コンパイラオプションによって,.cppまたは.cxx以外の拡張子を持つファイルをC++のソースファイルとしてコンパイルできます。
MSDN: /Tc、/Tp、/TC、/TP (ソース ファイル タイプの指定)
※上記のMSDNでは,IDE上での操作を/TCおよび/TPについてのみ説明していますが,プロジェクトの代わりに個々のファイルのプロパティで行うことで/Tcや/Tp相当のことも行えます。

Re: time_tを使ったソースをコンパイルできません

Posted: 2013年5月11日(土) 12:43
by miyasan_tora
あれから、夢中でやってましたが、どうしても判らない質問があり再度もどってきたら
沢山の、助言がありびっくりしました。
C,C++,CPP,h などこんがらかっていました。やっと理解してきました。
遅くなりましたが、涼雅さん、softyaさん、Boxさん、YouOさんありがとうございます。

とんちんかんな質問ですが別スレッドでさせていただきます。よろしくお願いいたします。