相关疑难解决方法(0)

为无符号类型分配符号文字时,为什么GCC不会产生警告?

本网站上的几个问题揭示了混合有符号和无符号类型时的缺陷,大多数编译器似乎都很好地生成了这种类型的警告.但是,GCC在将有符号常量赋值给无符号类型时似乎并不在意!考虑以下程序:

/* foo.c */
#include <stdio.h>
int main(void)
{
    unsigned int x=20, y=-30;
    if (x > y) {
        printf("%d > %d\n", x, y);
    } else {
        printf("%d <= %d\n", x, y);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用GCC 4.2.1进行编译如下所示在控制台上没有输出:

gcc -Werror -Wall -Wextra -pedantic foo.c -o foo
Run Code Online (Sandbox Code Playgroud)

生成的可执行文件生成以下输出:

$ ./foo
20 <= -30
Run Code Online (Sandbox Code Playgroud)

在将有符号值分配给-30无符号整数变量时,是否有某些原因导致GCC不生成任何警告或错误消息y

c unsigned gcc gcc-warning

14
推荐指数
2
解决办法
3954
查看次数

标签 统计

c ×1

gcc ×1

gcc-warning ×1

unsigned ×1