Короткая версия: компилировать с -std=gnu99
или -std=c99
.Объяснение следует.
Я воспроизвел аналогичную "проблему" на своей коробке.Однако, когда я пытаюсь скомпилировать:
# gcc -Wall -o float float.c
float.c: In function 'main':
float.c:6: warning: implicit declaration of function 'strtof'
float.c:6: warning: format '%f' expects type 'double', but argument 2 has type 'int'
Итак, я посмотрел на страницу man
для strtof()
, и там написано:
SYNOPSIS
#include <stdlib.h>
double strtod(const char *nptr, char **endptr);
#define _XOPEN_SOURCE=600 /* or #define _ISOC99_SOURCE */
#include <stdlib.h>
float strtof(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr);
Что это означает, что это тотиз этих значений должно быть #define
d, прежде чем включать stdlib.h
.Тем не менее, я просто перекомпилировал с -std=gnu99
, и это определяет один из них для меня, и это работает.
# gcc -std=gnu99 -Wall -o float float.c
# ./float 2.3
2.300000
Мораль: всегда компилировать с -Wall
.; -)