- - PR -
C の localtime() の引数は混乱を招く。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-11 23:48
JISは http://www.jisc.go.jp のJIS検索からJIS規格名称検索から「プログラム言語」をキーに検索すると閲覧できます。 | ||||||||
|
投稿日時: 2004-09-12 02:37
やってみました。 これ、いいですね ISO とか ITU とかだと、タダ読みは出来なかったりめんどくさかったり しますので... | ||||||||
|
投稿日時: 2004-09-15 17:11
ありがとうございます。参考になります。 上のJIS規格によると, time_tは時刻を表すことができる算術型 となっているので、
int time[2] は、規格外ということでしょうか。。 intの配列は"算術型"ではないと思うのですが。 C言語講座みたいになってしまってすいません | ||||||||
|
投稿日時: 2004-09-18 04:29
コブラさん
サンプルコードを書いてみました。 これなら関数の中でmallocして、関数の外でfreeできますよ。 参考になれば幸いです。 あと、開発中のgccのオプションは gcc -g -Wall -ansi -pedantic -O0 あたりがおすすめですよ。 splintを使うなら splint -weak *.c くらいがいいと思います。 ※サンプルなんで結構適当です
| ||||||||
|
投稿日時: 2004-09-18 19:55
この頃の C では厳密な型チェックは行われず、キャスト演算子も 存在しなかったような仕様であることがポイントと思うですよ。 てゆーか、time_t型は ANSI C で出てきたものだろうと思います。 手元には K&R 第1版も無いので確かなところは分かりませんが... NetBSD で man 3 time してみると、time 関数のほうは Version 6 で すでに存在していたようです。 Version 6 において、time 関数を実装するのに利用できそうな システムコールは gtime() くらいで、それは
というものです。 ここで、u はuser構造体で、メンバ u_ar0 は int *u_ar0 として定義されています。 | ||||||||
|
投稿日時: 2004-09-18 20:21
今読み直して、勘違いしていたことに気づきました。 さっと読んで、 "time_tをint[2]と定義しているものがある"と 書かれていたと記憶していました。 すいません。 私がCを勉強しばじめたときにはもうK&Rの第2版が 出ていたので、ANSI C以前のことについては 正直言って疎いです…。 歴史的経緯を知るといろいろわかって面白いですね。 | ||||||||
|
投稿日時: 2004-09-18 21:21
おぉぉぉっ!!
素直に func(p); とやってしまうと、ポインタ型とポインタへのポインタ型で 「互換性が違う」と通常は怒られますが、ここでポインタに & 付けるとは・・・ この使い方は初めて見ます。これは、余り教科書に載ってない。 ポインタへのポインタはスタックフレーム外からの free(); を可能にする。。。 こういう具体的でシンプルなコード、レベルアップにかなり役立ちます。 助かります>未記入氏 もうちょっと自分でいじくってみます。 >gcc -g -Wall -ansi -pedantic -O0 このチェックは厳しい! マジ厳しい(笑) インクルード・ライブラリの定数、関数に対して厳しい指摘が・・・ | ||||||||
|
投稿日時: 2004-09-18 22:21
ポインタに&を付けると言うより、ポインタ型変数のポインタを渡してるって事ですね。 ポインタ型の変数もあくまで普通の変数に違いありませんから。 |