[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