【问题标题】:error: overflow in implicit constant conversion [-Werror=overflow]错误:隐式常量转换溢出 [-Werror=overflow]
【发布时间】: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 上运行此代码并得到隐式转换错误。 我需要进行哪些修改,原因是什么?

【问题讨论】:

    标签: c++ c


    【解决方案1】:

    n3376 3.9.1/1

    普通字符、有符号字符和无符号字符是三种不同的类型。 字符、有符号字符和无符号字符 unsigned char 占用相同的存储量并具有相同的对齐要求(3.11);那是, 它们具有相同的对象表示。

    什么是char 是实现定义的,所以这里需要unsigned char,它处理值(0-255)。

    【讨论】:

      【解决方案2】:

      看起来你的charsigned char,它接受从-128 到127 的值。而200 太大了,会溢出成为负数。

      要修复它,请将 char 更改为 intunsigned char

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

      【讨论】:

      • char从不signed charchar 可以是有符号或无符号(实现定义),但它始终是不同于 signed charunsigned char 的类型。
      • 这是一个没有区别的区别:C 代码的行为在任何情况下都无法与 char 区别开来,signed charunsigned char 的同义词。 (我对 C++ 不太确定。)
      猜你喜欢
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多