#include <stdio.h>
int main(void)
{
char test = 0x80;
printf("%c\n", test); /* To remove the "unused" warning */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道一个字符保证是一个字节.0x80也是一个字节.那么为什么我会收到以下错误/警告?
错误:隐式常量转换溢出[-Werror = overflow]
在我的情况下,这是一个错误,因为我将警告视为错误.
0x80是出现此警告/错误的最小值.如果我将其更改为0x7F,则编译正常.我使用ideone.com和'C99 strict'选项来编译代码.据报道使用gcc-4.7.2.
Jon*_*Jon 14
该char类型在您的编译器中签名,因此即使它具有8位信息,也不能存储大于127(0x7f)的值.
标题<limits.h>定义了用于确定整数类型的符号和范围限制的宏,包括char.