我最近在笔记本电脑上设置了一个 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/