错误:隐式常量转换溢出 [-Werror=overflow]
Posted
技术标签:
【中文标题】错误:隐式常量转换溢出 [-Werror=overflow]【英文标题】:error: overflow in implicit constant conversion [-Werror=overflow] 【发布时间】:2013-05-16 05:59:59 【问题描述】:#include<stdio.h>
int main()
char ch=200;
printf("\n%d",ch);
return 0;
我在http://ideone.com/YNkKT6#view_edit_box 上运行此代码并得到隐式转换错误。 我需要进行哪些修改,原因是什么?
【问题讨论】:
【参考方案1】:n3376 3.9.1/1
普通字符、有符号字符和无符号字符是三种不同的类型。 字符、有符号字符和无符号字符 unsigned char 占用相同的存储量并具有相同的对齐要求(3.11);那是, 它们具有相同的对象表示。
什么是char
是实现定义的,所以这里需要unsigned char
,它处理值(0-255)。
【讨论】:
【参考方案2】:看起来你的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
的类型。
这是一个没有区别的区别:C 代码的行为在任何情况下都无法与 char
区别开来,signed char
或 unsigned char
的同义词。 (我对 C++ 不太确定。)以上是关于错误:隐式常量转换溢出 [-Werror=overflow]的主要内容,如果未能解决你的问题,请参考以下文章
row_number()over(partition by 后面加数字型字段提示varchar 转换number 算术溢出错误