【发布时间】:2015-02-06 10:49:22
【问题描述】:
我已在 Windows 7 32 位机器上成功安装 MinGW,并尝试使用命令行或 MinGW 控制台编译一个简单的程序。
代码在 printf 语句中存在故意错误:
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
printf("%d\n" , 3.14 ) ;
return 0 ;
}
gcc -Wall hello.c 命令给出了正确的警告:hello.c:7:2: warning: format '%d' expects argument of type 'int'...
但是命令gcc -std=c99 -Wall hello.c 没有给出任何警告。
两者都创建一个可执行的a.exe(运行并给出相同的结果)。
(有趣的是,一个命令gcc -std=gnu99 -Wall hello.c 给出了警告。)
我不知道这是否是一个错误,或者安装是否以某种方式出错,但两者似乎都不太可能,因为编译器工作并成功编译了一个更大的项目(但使用 -std=c99 时当然省略了相同的警告)。
我一定遗漏了一些信息。
(ps:如果有人安装了新的 MinGW,请测试一下。)
gcc 版本 4.8.1 (GCC)
更新 1:
在包含stdio.h 之前定义_GNU_SOURCE 会删除警告,即使是gcc -Wall hello.c。
更新 2(可能不太相关):
编译
printf("%lf\n" , 3.14 ) ;
-std=c99 标志输出:0.000000
-std=gnu99 输出:3.140000
并编译:
printf("%f\n" , 3.14 ) ;
-std=gnu99 和 -std=c99 输出:3.140000
更新 3:
似乎受到影响的函数有:printf、fprintf、snprintf、sprintf。
【问题讨论】:
-
什么版本?
gcc --version -
我得到了相同的结果(也是 4.8.1)。有人应该告诉开发人员,因为这对我来说似乎是一个错误。
-
@mafso
static __inline__ __attribute__((__cdecl__)) __attribute__ ((__nothrow__)) int printf (const char *__format, ...) {... -
其实 mingw 相比 mingw64 有更多的 bug 和更少的 Windows 和新的 C 和 C++ 标准支持的功能,而且开发似乎也没有太大进展en.wikipedia.org/wiki/MinGW#MinGW-w64
-
@LưuVĩnhPhúc 谢谢你的建议。 MinGW-w64 没有这些问题。