Linux の x86 マシンで gcc 4.5.2 を使用してコンパイルした場合、次の警告はまったく表示されません。
char foo = 255;
しかし、私が使用する-pedantic
と、gccは次のように言います:
警告: 暗黙の定数変換でのオーバーフロー
gcc の動作は少し奇妙で、この割り当てで何が起こっているのかを本当に理解しているかどうか疑問に思います。char
が POSIX で 8 ビット長で、デフォルトで署名されている場合、保持できないと思います255
。
C標準では、符号なし整数オーバーフローはオーバーフローになると言っていますが、符号付き整数オーバーフローは定義されていません。では、この割り当ては未定義の動作ですか? そして、なぜgccはこのように振る舞うのでしょうか?