前回は、ライブラリの作り方をやりましたが 今回は、その内容を少しましなものにしてみました。 C言語では現在の日付や時刻を取得するのが意外に 面倒くさいですね。そこで、現在の日付、時刻を 取得する関数を作り、これをライブラリにすれば 便利ですね。time関数やら、localtime関数については、 すでにC言語編第26章で解説していますので 忘れてしまった人は復習して下さい。 ここでは、現在の時刻や、日付を取得する関数 get_time, get_date関数を作りこれをライブラリにします。
これらの関数の引数をポインタにしていることに 注意して下さい。どうしてポインタにしたかわからない人は C言語編第31章を復習してみて下さい。 ポインタにしておかないとこの関数を呼びだしても 呼び出した方の関数内にある変数には何の影響もないからですね。 そして、構造体へのポインタについてもよく復習しておいて ください。そして、get_date関数の戻り値がchar型へのポインタであること にも注意して下さい。「日」「月」などの文字列を返すからですね。#include <time.h> int get_time(int *hr, int *min, int *sec) { struct tm *mytime; time_t long_time; time(&long_time); mytime = localtime(&long_time); *hr = mytime->tm_hour; *min = mytime->tm_min; *sec = mytime->tm_sec; return 0; } char *get_date(int *year, int *mon, int *mday) { struct tm *mytime; time_t long_time; static char *day_of_week[] = {"日", "月", "火", "水", "木", "金", "土"}; time(&long_time); mytime = localtime(&long_time); *year = mytime->tm_year; *mon = mytime->tm_mon + 1; *mday = mytime->tm_mday; return (day_of_week[mytime->tm_wday]); }
上の関数から、ライブラリを作って下さい。 メモリモデルはとりあえずsmallでよいでしょう。 いろいろなメモリモデルのライブラリを作って ライブラリの名前の最後にs,m,lなどの文字をくっつけて どのメモリモデルのライブラリなのか一目でわかるように しておけば便利です。たとえばsmallメモリモデルの ライブラリならxxxs.libなどのようにします。 ここでは、スモールメモリモデルしか扱わないので lib03.libという名前にしました。 次は、このライブラリに含まれている関数の プロトタイプをヘッダーファイルに書きます。
はい。これで形は整いましたね。 後で、このライブラリに関数を追加するときは ライブラリマネージャ(LIB)を使ってコマンドライン上から 作業をします(マイクロソフト)。コマンドラインから作業をしたくない人は 上のソースに、関数のソースを追加コピーして 統合環境からライブラリを作ってもよいですね。 昔は、コンピュータの性能があまりよくなかったので 統合環境で作業をすると大変時間がかかりました。 しかし、現在はコンピュータの性能がよくなり 統合環境で作業をしても時間的にはほとんど差がありません。 便利なものはどんどん使いましょう。// lib03.h int get_time(int *, int *, int *); char *get_date(int *, int *, int *);
さて、今作ったライブラリが正しく動作するか テストプログラムを作ってみましょう。
はい、ずいぶん簡単なプログラムになりましたね。 get_date関数を呼び出すときについでに、yobiにこの関数の 戻り値をコピーしています。また、このmain関数内のローカル 変数はアドレスを各関数に渡すことにより値を代入してもらっている ことに注意して下さい。#include <stdio.h> #include "lib03.h" #include <string.h> int main(void) { int yr, mon, mday, hr, mn, sec; char yobi[3]; strcpy(yobi, get_date(&yr, &mon, &mday)); get_time(&hr, &mn, &sec); printf("本日は%d年%d月%d日,%s曜日です。\n", yr, mon, mday, yobi); printf("ただいま%d時%d分%d秒です。\n", hr, mn, sec); return 0; }
ライブラリも、支障なくできたようですね。
メデタシ、メデタシ。
最後に大事な注意ですがライブラリマネージャなどを使って
Update Mar/04/1997 By Y.Kumei