3

エラー: 暗黙の定数変換でのオーバーフロー [-Werror=overflow]

#include<stdio.h>

int main()
{ 
    char ch=200;
    printf("\n%d",ch);
    return 0;
}

http://ideone.com/YNkKT6#view_edit_boxでこのコードを実行すると、暗黙的な変換エラーが発生します。どのような変更が必要で、その理由は何ですか?

4

2 に答える 2

9

n3376 3.9.1/1

プレーン char、signed char、および unsigned char は、3 つの異なる型です。char、signed char、および unsigned char は、同じ量のストレージを占有し、同じアライメント要件 (3.11) を持ちます。つまり、それらは同じオブジェクト表現を持っています。

これは実装定義であるため、値 (0 ~ 255) を処理charする必要があります。unsigned char

于 2013-05-16T06:01:31.370 に答える
0

-128 から 127 までの値を受け入れるあなたのcharisのように見えます。200 は大きすぎてオーバーフローして負の数になります。signed char

それを修正するには、またはに変更しcharますintunsigned char

int main()
{ 
    unsigned char ch=200;
    printf("\n%d",ch);
    return 0;
}
于 2013-05-16T06:02:22.217 に答える