我最近在笔记本电脑上设置了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;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
i_max: 2147483647, c_max: 127, c: -1
Run Code Online (Sandbox Code Playgroud)
正如您在上面的代码中看到的,我将一个int分配给一个char.这不应该产生警告,可能会发生数据丢失吗?微软的编译器(我配置得非常严格)会发出警告而GCC没有.
以下是我使用的GCC选项:
-g -Werror -ansi -pedantic -Wall -Wextra
Run Code Online (Sandbox Code Playgroud)
我错过了一些GCC选项,使编译时检查更严格吗?
您正在寻找
-Wconversion
Run Code Online (Sandbox Code Playgroud)
您必须向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
Run Code Online (Sandbox Code Playgroud)
正如其他人已经指出的那样,版本4.3的-Wconversion变化行为- 关于强制进行类型转换的原型的旧警告现在可用.-Wtraditional-conversion
| 归档时间: |
|
| 查看次数: |
533 次 |
| 最近记录: |