#include <stdio.h>
int main(void)
{
    char test = 0x80;
    printf("%c\n", test);  /* To remove the "unused" warning */
    return 0;
}

我知道一个字符保证是 一个 字节。 0x80 也是一个字节。那么为什么我会收到以下错误/警告?



就我而言,这是一个错误,因为我将警告视为错误。

0x80 是出现此警告/错误的最小值。如果我将其更改为 0x7F,则编译正常。我使用带有“C99 strict”选项的 ideone.com 来编译代码。它报告使用 gcc-4.7.2。

最佳答案

char 类型在您的编译器中已签名,因此即使它有 8 位信息,它也不能存储大于 127 (0x7f) 的值。

header <limits.h> 定义了宏,可让您确定整数类型的符号和范围限制,包括 char

关于c - 为什么这个程序会导致溢出?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16056536/

10-11 19:13