この Web サイトのいくつかの質問は、符号付きと符号なしの型を混在させる場合の落とし穴を明らかにしており、ほとんどのコンパイラはこの型の警告の生成についてうまく機能しているようです。ただし、符号付き定数を符号なし型に割り当てる場合、GCC は気にしないようです! 次のプログラムを検討してください。
/* foo.c */
#include <stdio.h>
int main(void)
{
unsigned int x=20, y=-30;
if (x > y) {
printf("%d > %d\n", x, y);
} else {
printf("%d <= %d\n", x, y);
}
return 0;
}
以下のように GCC 4.2.1 でコンパイルすると、コンソールに何も出力されません。
gcc -Werror -Wall -Wextra -pedantic foo.c -o foo
結果の実行可能ファイルは、次の出力を生成します。
$ ./foo
20 <= -30
-30
符号付きの値を符号なしの整数変数に割り当てるときに、GCC が警告またはエラー メッセージを生成しない理由はありますy
か?