【发布时间】:2013-05-16 05:59:59
【问题描述】:
错误:隐式常量转换溢出 [-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
普通字符、有符号字符和无符号字符是三种不同的类型。 字符、有符号字符和无符号字符 unsigned char 占用相同的存储量并具有相同的对齐要求(3.11);那是, 它们具有相同的对象表示。
什么是char 是实现定义的,所以这里需要unsigned char,它处理值(0-255)。
【讨论】:
看起来你的char 是signed char,它接受从-128 到127 的值。而200 太大了,会溢出成为负数。
要修复它,请将 char 更改为 int 或 unsigned char
int main()
{
unsigned char ch=200;
printf("\n%d",ch);
return 0;
}
【讨论】:
char从不signed char。 char 可以是有符号或无符号(实现定义),但它始终是不同于 signed char 和 unsigned char 的类型。
char 区别开来,signed char 或 unsigned char 的同义词。 (我对 C++ 不太确定。)