[PHP-users 1324] Re: PHPのint 境界とfloatへの型変換
Mitsuhisa TANAKA
php-users@php.gr.jp
Tue, 21 Aug 2001 16:14:55 +0900
田中です。
後から、このスレッドを読んだ人が誤解するといけないので、
From: "S.Sugichan" <sugichan@tkd.att.ne.jp>
Subject: [PHP-users 1268] PHPのint 境界とfloatへの型変換
Date: Sun, 19 Aug 2001 22:12:19 +0900
> 田中さんが言われているように、確かにC言語だろうがJavaだろうが(Javaは経
> 験無いので想像ですが)上限下限に対しては内包してる問題ですね。
>
> ただCの場合コンパイルという手順を踏むため、以下のソースですと、ワーニン
> グを出してやばいんじゃないのと促してくれますよね?(参照部:参照)
> Cのサンプル:
(snip)
> #include <stdio.h>
> main()
> {
> int i;
> for(i=2147483640;i<2147483649;i++)
> {
> printf("%d\n",i);
> sleep(1);
> }
> }
>
> Cのワーニング:
> loop.c:5: warning: decimal constant is so large that it is unsigned
この C のソースは、明らかに間違ってると思います。
そもそも、int型(私は short型を使いますが)を利用して上記のコー
ドは、書かないです。
short型の 数値範囲は -32768 ~ 32767 だからです。
上記のコードの内
for (i = 0; i < n; ++i)
とかになっていて、終了条件として利用する n が定数でない場合に、
n が、short(int)型の範囲を超えないと言う絶対的な保証がない限り
short(int)型に限らず、型の扱える範囲を適切に扱わなければ、想像
もしない(経験が解決する路の一つかな) BUG に頭を悩ます、と言うこ
とではないでしょうか?
そして。この様な場合は、コンパイルでワーニングは出ないでしょ?
以上、よろしくお願いいたします。
-----------------------------------------------
TANAZO Limited Partnership / Mitsuhisa TANAKA
0426-42-0321(FAX share) / 070-5582-0823(PHS)
http://www.tanazo.com/ I'm not a cyborg :-(
http://tanazo.rocketbeach.net/ e-shop
http://www.tama-oss.org/ [tama open system studio]
Key fingerprint = A455 00C4 5585 8237 9EBB 12D9 3E2D 5A24 0B34 70B0