[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