• ベストアンサー

【C言語プログラミング】 time()関数について

現在の時刻を表示させるプログラムをC言語で作成したいのですが、 書籍などを参考に以下のコーディングを行いました。 #include <stdio.h> #include <time.h> int main(void) { time_t timer; /* 現在の時刻を取得する */ timer = time(&timer); /* 現在の時刻を出力する */ printf("現在の時刻: "); printf("%s", ctime(&timer)); printf("です。\n"); return 0; } 質問内容は以下の通りです。 (1)「time_t timer;」とは、time_t型の変数timerを宣言し、   この変数にはtime()関数で取得した現在時刻の値が入る? (2)「timer = time(&timer);」に関して、time()関数で取得した値   を変数timerが指すアドレスの場所に入れる? その場合、   返り値を格納する変数timerに、time()関数の引数と同じtimerが   指定されているのはなぜ? (3)プログラムを実行すると以下の結果となる。(time.exeを実行)   C:\>time   現在の時刻: 12:52:07.61   新しい時刻を入力してください:   現在の時刻を表示した直後に「新しい時刻を入力して下さい」が   表示される。これはtime()関数の仕様どおり? 以上です。初歩的な質問で申し訳ございませんが、ご回答よろしく お願いいたします。

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★アドバイス (1)...はい。その通りです。 (2)...単純に時刻を取得して利用する際に2つの方法を取れるということ。  つまり  if ( time(NULL) == time_save ){ … }  としたり  time( &now );  if ( now == time_save ){ … }  という2つの使い方ができるようにしたのかも。 ・単純に時刻を取得したいなら戻り値を使い引数はいらない。  変数に現在の時刻を保存してなおかつそのときに時刻を  戻り値で得たい場合には戻り値を何かに使う。  例えば  time_t start;    if ( time(&start) == time_save ){ … }  こんな感じで使える。よって  timer = time( &timer );  という使い方はしない。 (3)...内部コマンドの『time』が実行されました。  プログラム名を変更して実行するとexeのプログラムが実行されます。  他にも『COPY』とか、『REN』という内部コマンドと同じ名前で  自作したプログラム名を付けると先に実行されるのは内部コマンドになります。  なお、拡張子を指定して『time.exe』とすると内部コマンドではなく  自作のプログラムが実行されます。  試して見て下さい。 >これはtime()関数の仕様どおり?  ↑  Windows OS(MS-DOS)などの OS 仕様であってC言語のtime()関数の仕様ではありません。

masy0312
質問者

お礼

詳細なご説明ありがとうございました。 非常に勉強になりました。

その他の回答 (3)

  • x415f484f
  • ベストアンサー率71% (57/80)
回答No.3

> 書籍などを参考 どの程度読んでおられるのか、わかりませんが、基本的なことが書いて いないような書籍はあまりよろしくないと思われます。 (1), (2) についてはマニュアルと time.h の中身をご覧下さい。 (3) は Windows 付属の CMD.EXE 内部の TIME が実行されています。 ご自身がどのディレクトリでコンパイルなさったのかを把握されて おられないのでしょうか? このコードの実行結果はおそらくこのようになると思われます。 現在の時刻: Sun Apr 13 14:23:00 2008 です。 > C:\>time この「C:\>」から Windows 環境であることはわかりますが、コンパイラや OS などの環境についても明確にご提示されることをお薦めします。

masy0312
質問者

お礼

失礼いたしました。情報が不足していましたね。 以後気をつけます。 とりあえず疑問点は解消しました。 ありがとうございます。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

(2)も、time関数の使い方を調べてみてください。 (3)は、ソースファイルをtime.c以外(例:mytime.c)の名前にして、 OSにもともと備わっているコマンドの名前と重複しないようにしてみてください。

masy0312
質問者

お礼

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

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

(1) time() のマニュアルを読んでね。 (2) わかりません。 (3) 組み込みコマンドの time が実行されています。

masy0312
質問者

お礼

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

関連するQ&A