【发布时间】:2010-12-16 08:38:28
【问题描述】:
我最近在我的笔记本电脑上设置了一个 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 选项以使编译时检查更加严格?
【问题讨论】: