Я успешно установил MinGW на 32-битной машине Windows 7 и попытался скомпилировать простую программу, используя либо командную строку, либо консоль 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' ожидает аргумент типа '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:
Определение _GNU_SOURCE
перед включением stdio.h
удаляет предупреждение даже с помощью 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.