c - GCC - 将 int 分配给 char 时不应该发出警告吗?

标签 c gcc mingw

我最近在笔记本电脑上设置了一个 MinGW + MSYS 环境,以检查 Netbeans C/C++ 支持的情况。一切似乎都运行良好,但是,在我的测试过程中,我注意到 GCC 和 Microsoft 的 cl.exe 编译器之间存在差异。

这是一个示例程序:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main(void) {
    int i_max = INT_MAX;
    char c_max = CHAR_MAX, c;

    c = i_max;
    printf("i_max: %d, c_max: %d, c: %d\n", i_max, c_max, c);
    return EXIT_SUCCESS;
}

输出是:

i_max: 2147483647, c_max: 127, c: -1

正如您在上面的代码中看到的,我将一个 int 分配给一个 char。这不应该产生可能发生数据丢失的警告吗? Microsoft 的编译器(我已将其配置得非常严格)会发出警告,而 GCC 不会。

以下是我使用的 GCC 选项:

-g -Werror -ansi -pedantic -Wall -Wextra

我是否遗漏了一些 GCC 选项来使编译时检查更加严格?

最佳答案

你在找

-Wconversion

您必须向 gcc 开发人员询问为什么某些警告未包含在 -Wall-Wextra 中的具体原因。

无论如何,这些是我使用的标志:

-Wall -Wextra -Wmissing-prototypes -Wmissing-declarations -Wshadow
-Wpointer-arith -Wcast-align -Wwrite-strings -Wredundant-decls -Wnested-externs
-Winline -Wno-long-long -Wconversion -Wstrict-prototypes

正如其他人所指出的,-Wconversion 的行为因 version 4.3 而改变。 - 关于原型(prototype)强制类型转换的旧警告现在作为 -Wtraditional-conversion 提供。

关于c - GCC - 将 int 分配给 char 时不应该发出警告吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1730255/

相关文章:

c - 将文件中的数字读入动态分配的数组

c - 我在哪里可以找到 C 语言的移位指南?

c - ' ' 之前的预期表达式

c - 包含文件似乎被忽略

c++ - 将 MakeFile 导入为 MingW 项目

windows - MinGW,使用控制台构建 GUI 应用程序

c - 如何使用 C 发送和捕获发送到 PID 的信号

gcc - 如何让 gcc 显示调用的内部命令?

c++ - 转换问题

dll - 在 MinGW 中使用 libdl.so