« そのプログラムは、たまたま動いていたんだよ!? | トップページ | 暗黙のキャスト »

2005年7月 8日 (金)

変数の範囲

Cで使用する変数には、全て範囲がある…。

で、たまに以下のようなプログラムを作ると
無限にループして終わらない…。

#include    <stdio.h>
void main( void )
{
    char    Count;

    printf( "Start\n" );
    for( Count = 0 ; Count < 128 ; Count++ )
    {
        printf( "%3d\n", Count );
    }
    printf( "End\n" );
}

結果は、
Start
  0
  1
~中略~
126
127
-128
-127
~無限ループ~

「char」の範囲は、「-128 <= char <=127」なので
「char < 128」は、必ず成立する…。

でも、ちょっと待て!

それ以前になぜに「char < 128」が

エラーにならないのか?!

エラーだろ…!?

少なくともワーニングでも出してくれれば気を付けるよ!

バグでしょうか?

#include    <stdio.h>
void main( void )
{
    char    A;

    A    = 127;    /* ワーニング出ませんが…。 */
    A    = 128;    /* ワーニングが出ます…。 */
}

だと
「warning C4305: '=' : 'const int ' から 'char ' へ切り詰めます。」
て、ワーニング出るぞ!

演算を行う場合には、演算中の
最も範囲が大きい変数に
合わせてから演算する。

に引っかかっているのでね…。

暗黙のキャストってやつですか…。

つまり、「(int)Count < 128」となっていたのですね…。

この辺は…

誰も教えてくれないCの常識と言う奴ですか…?

暗黙の了解?

このルールは、たまに良く分からんバグとして
プログラマーをもだえさせてくれます。

私も、もだえました…。

|

« そのプログラムは、たまたま動いていたんだよ!? | トップページ | 暗黙のキャスト »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 変数の範囲:

« そのプログラムは、たまたま動いていたんだよ!? | トップページ | 暗黙のキャスト »