ページ 11

ループ内のcount++について

Posted: 2010年7月27日(火) 23:05
by SG
いつもお世話になっております。
タイトルの件で質問させていただきます。
C言語は苦Cさんを一通り目を通したというレベルです。

http://dixq.net/g/45.html
のページのcountや龍神録のキャラ描画関数
void calc_ch(){
        ch.cnt++;
        ch.img=(ch.cnt%24)/6;
}
のch.cntは一秒間に60ずつ増えるという理解をしているのですが
(ここからすでに間違っている可能性もありますが)
これらの定義がintということはcountやch.cntが2147483647に達すると
オーバーフローするのでしょうか?

ゲームは別に止まらないので自分の思い違いかと思うのですが
ご解説いただけますと助かります。よろしくお願いいたします。 画像

Re:ループ内のcount++について

Posted: 2010年7月27日(火) 23:13
by Poco
オーバフローしますよ。

#ゲームが止まらないのが運が良いせいのか、計算ずくなのかはわかりません。

Re:ループ内のcount++について

Posted: 2010年7月27日(火) 23:24
by SG
なるほど、ありがとうございました。
しかし回答をお聞きしてからよくよく計算すると結構な時間ですね。
ゲーム止まらないと申し上げましたが嘘でした。流石にこの長時間は確認していませんでした。
対策する必要のない十分な時間ということですか。

Re:ループ内のcount++について

Posted: 2010年7月27日(火) 23:31
by Poco
> ゲーム止まらないと申し上げましたが嘘でした。流石にこの長時間は確認していませんでした。

ソースがあるので、初期値を書き換えちゃえば、すぐにも確認できますよ。


> 対策する必要のない十分な時間ということですか。

おそらくそういう設計なのでしょうね。

Re:ループ内のcount++について

Posted: 2010年7月27日(火) 23:37
by Dixq (管理人)
60(フレーム)*60(秒)*60(分)*24(時間)*365(日)=約18億
と言う事で、1年間ゲームをつけっぱなしでもその値にはならないので、特に気にせずに実装しました。
ただカウンタ関係はunsigned intが良いですね。

Re:ループ内のcount++について

Posted: 2010年7月28日(水) 00:53
by SG
ぽこさん、 Dixqさん

ご丁寧な回答ありがとうございました。
結果的には問題ないとのことですが、やはり私としては
オーバーフローする可能性があるということを知っておくのと
知らないのではだいぶ差があると考えております。
すっきりしました。

しかし初期値書き換えなどの発想はパッとは出てきません、ナカナカ・・
プログラムは奥が深いですね