エラー: 暗黙の定数変換でのオーバーフロー [-Werror=overflow]
#include<stdio.h>
int main()
{
char ch=200;
printf("\n%d",ch);
return 0;
}
http://ideone.com/YNkKT6#view_edit_boxでこのコードを実行すると、暗黙的な変換エラーが発生します。どのような変更が必要で、その理由は何ですか?
エラー: 暗黙の定数変換でのオーバーフロー [-Werror=overflow]
#include<stdio.h>
int main()
{
char ch=200;
printf("\n%d",ch);
return 0;
}
http://ideone.com/YNkKT6#view_edit_boxでこのコードを実行すると、暗黙的な変換エラーが発生します。どのような変更が必要で、その理由は何ですか?
n3376 3.9.1/1
プレーン char、signed char、および unsigned char は、3 つの異なる型です。char、signed char、および unsigned char は、同じ量のストレージを占有し、同じアライメント要件 (3.11) を持ちます。つまり、それらは同じオブジェクト表現を持っています。
これは実装定義であるため、値 (0 ~ 255) を処理char
する必要があります。unsigned char
-128 から 127 までの値を受け入れるあなたのchar
isのように見えます。200 は大きすぎてオーバーフローして負の数になります。signed char
それを修正するには、またはに変更しchar
ますint
unsigned char
int main()
{
unsigned char ch=200;
printf("\n%d",ch);
return 0;
}