変数の範囲
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の常識と言う奴ですか…?
暗黙の了解?
このルールは、たまに良く分からんバグとして
プログラマーをもだえさせてくれます。
私も、もだえました…。
| 固定リンク
コメント