- - PR -
C の localtime() の引数は混乱を招く。
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-10 13:48
自分でコーディングしたコードの何処に問題が有るかを
自分でデバッグもしない上に結局人に教えてもらった コードで解決したからといってそれで良しとし、 さらにSolarisとLinuxが100%コンパチでないのに 結果が違う事について自分で調べようともせずに あげくの果てに言語仕様にまで文句を付けている様な 人間に他人を批判する資格は無いです。 本当に自分でコーディングされているのですか? 自分でコーディングしているならば 問題になっている点なんて特定できるはずです。 また「プ」とか書くのも知っている限りでは 貴方だけです。技術者としてどうかと思いますが。 一から出直してくる事を勧めます。 | ||||||||||||||||||||
|
投稿日時: 2004-09-10 13:50
タコツボです。
私が言いたかったのは、
この部分に対して、constの有無を領域を確保するための指針にするのはまずいのではないかということでして、領域を確保しないことが意味が無いだけならまだしも、(例によって運次第で)セグメンテーション・フォルトになりますよ、ということです。 | ||||||||||||||||||||
|
投稿日時: 2004-09-10 14:10
>それがいやなら、自分で作ればいいだけのことです。
なるほど。これは解る。 確かに、自分で作れば良いな。 しかし、池の周りにフェンスを張っとくのと、そのまま放置して好きにさせるのとでは 死亡率が明らかに変わってくるんちゃうかとも思いますが。>ナキヲ ------------------------------------------------------------------------- で、Solaris の gcc も RedHat の gcc も「コンパイラー」という機能については どっちも遜色無いんちゃうんか? 仮に予測した結果と違えば同じになるように 努力するやろ普通 (ププ >また「プ」とか書くのも知っている限りでは >貴方だけです。技術者としてどうかと思いますが。 だから、お前の居る世界は「狭い」と言われるのだ (プ >本当に自分でコーディングされているのですか? アホか。 こんな出来の悪いコード俺が書く訳無いやろっ (爆) お前が、脳内妄想でソースレベルの問題に矮小化しとる限り根本的な解決は遠いな。 つまり、一つは 「何故トラブルになり易いような値の渡し方をするのか」 もう一つは 「何故 gcc で二つの異なる結果が出るのか」 >コードで解決したからといってそれで良しとし、 ホンマにこれが正しいとすれば、このスレッドは立たんかったやろな。 人生やり直すには、もう手遅れやろけど (オプ | ||||||||||||||||||||
|
投稿日時: 2004-09-10 14:23
あぁ、やっと意味が判りました>たこつぼ氏
不定アドレスなら const も 非 const も関係無いと・・・落ちまっせと。 const で受けるべき引数を持つ関数があったとして、そいつに不定アドレス渡しても コンパイルエラーは出んのですかね。。。出てくれたら、まぁ、一つの予防策なんかな、 とも思いますが。 記憶によると、昔の C に const 無かったんで、これは C++ に限った事か? とも思とる訳ですが・・・ | ||||||||||||||||||||
|
投稿日時: 2004-09-10 14:37
>ここはウソですよ。gettimeofday() は引数として渡されるポインタ変数の値は設定
>しません。(特にこの関数に限った話ではありませんが) >疑わしいと思われたら、宣言直後、および gettimeofday() の前後で第一引数の値を >表示させてみてください。 確かに、初期化してないポインタ変数やと localtime(); の前で落ちますな、これ。 実体の変数渡したら動いて当たり前・・・ん〜 確かに、gettimeofday() の第一引数で必ずしも値が設定されるとは限りませんな。 失礼しました。 | ||||||||||||||||||||
|
投稿日時: 2004-09-10 15:17
C++のコンパイルでOSによって結果が異なるで、
とか書いていたのは何処のどなたですかね?
書いてるじゃないですか。
は上のスレッドの流れを見ればそうですよね?
と質問していましたよね? この質問内容を見るならばprintfとscanfを使えば?と言う回答になるでしょう? 何処が違うか解らないので有れば、「このプログラムで間違い有りませんか?」 と質問すれば良いと思いますが。
システムの違いを意識しない人間に言われたくないですね。(^_^; | ||||||||||||||||||||
|
投稿日時: 2004-09-10 15:25
こんな環境でちょっと試してみました。
$ cygcheck -cd gcc gcc-g++ Cygwin Package Information Package Version gcc 3.3.3-3 gcc-g++ 3.3.3-3 p.c ... 未初期化のvoid*の値をいろいろな状況で表示してみる。
コンパイラのオプションを変えて試してみると: (オプションは gcc 1.65 のころに使ったものをうろ覚えて試しただけなので、 突っ込まないでください) $ gcc -Wall -o p p.c (略) $ ./p main 0x4 print_unassigned_pointer=0x9 print_unassigned_pointer_with_one_args=0x0 print_unassigned_pointer=0x9 $ gcc -Wall -O -o p p.c (最適化) (略) $ ./p main 0x4 print_unassigned_pointer=0x9 print_unassigned_pointer_with_one_args=0x1d print_unassigned_pointer=0x2c $ gcc -Wall --omit-frame-pointer -o p p.c (フレームポインタを抑制) (略) $ ./p main 0x4 print_unassigned_pointer=0x4 print_unassigned_pointer_with_one_args=0x4 print_unassigned_pointer=0x4 | ||||||||||||||||||||
|
投稿日時: 2004-09-10 16:07
CコンパイラやC++コンパイラの挙動が、
標準規格に100%のっとっていて、 全て同じ挙動をするのが理想ですが、 実際そうではないことはご存知でしょう。<コブラ 仕様上"結果は未定義"なんてのもありますし。。 処理系によって結果が異なる場合も存在します。 前にも書きましたが、 いやなら自分で作ればよいわけで。 自分の思うような挙動をする、コンパイラやOSを作って、 世界標準にすればいいんじゃないですか。 あなた程の技術者であれば可能でしょう(プ [ メッセージ編集済み 編集者: ナキヲ 編集日時 2004-09-10 16:10 ] |