[PHP-users 1353] Re: PHPのint境界とfloatへの型変換
Mitsuhisa TANAKA
php-users@php.gr.jp
Wed, 22 Aug 2001 09:35:17 +0900
田中です。
表題からずれていますが、
移植性の問題と広義に捕らえると、決して C言語の固有の問題では
ないと判断しました。
From: Mitsuhisa TANAKA <mitsu@tanazo.com>
Subject: [PHP-users 1324] Re: PHPのint 境界とfloatへの型変換
Date: Tue, 21 Aug 2001 16:14:55 +0900
> > #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 のソースは、明らかに間違ってると思います。
私の記述少し間違ってました。すいません。
gcc 2.95.2 の limits.h には以下の記述が有るので、
/* Minimum and maximum values a `signed int' can hold. */
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
少なくとも gcc 2.95.2 を前提とした実行環境では、上記検証用プ
ログラムは、正しいです。
# この様な誤解が生じるから、C言語では int型使わない方が良い
# と思う、移植性の問題が第一だが。
From: "S.Sugichan" <sugichan@tkd.att.ne.jp>
Subject: [PHP-users 1348] Re: PHPのint 境界とfloatへの型変換
Date: Wed, 22 Aug 2001 01:37:37 +0900
> > そもそも、int型(私は short型を使いますが)を利用して上記のコー
> > ドは、書かないです。
>
> intを使って書かないと判断した基準は何ですか?
> 今まで私はint使ってloop回すコードをちょくちょく使っていたのですが、今後
> のコーディングに関しても気になるのでご意見を聞かせて下さい。
C言語の int型は、処理系、例えばCPU の BIT数(8bit, 16bit, 32bit,...)
に左右されて、下の記述にもあるように、移植性が悪くなるからで
す。
/usr/include/limits.h
を覗いたのですが、alphaチップ(64bit CPUと言う認識でよいのかな?)
になると、 long int が拡張されるのですね。int は 32bit なんで
すね。
私の認識の中の、 C言語の int型は、基本的に CPU の BIT数とする
のが ANSI Cの規格なので、規格が変わったのかな?
こうなってくると、short / long を使って、int を使わないように
コーディングするのも **万全** では無いのですね。
> 文面から判断すると田中さんはintを使うと(移植した場合等)明示的型がに決
> まらないため、intは使わないで、shortにしていると読めますがいかがでしょう
> か?
> (int=16bitとは言ってないような気がする)
>
> #8bitCPUのCコンパイラもintは16bitだったような気が
これは多分、char が 8bit だからじゃないかな?
型の数値範囲の話なので、慎重にレスポンスを付けようと考えて、
前回の書き込みは、以下の書籍を参考に記述したのですが、再度読
み返してみると、
P.63 に .....<limit.h>及び<float.h>をご覧下さい。....
と逃げているし、
# こういう記述が一番問題無いということですね。
P.65 に掲げている図では、short型と int型の範囲が同じになってい
る。
参考文献
C言語によるプログラミング[スーパーリファレンス編] / 第1版第1刷
ISBN4-274-06337
以上、よろしくお願いいたします。
-----------------------------------------------
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