[gcc] !@#$ компилятор, где strtof ?!

Sharp

Есть код:

#include <stdio.h>
#include <stdlib.h>

int main {
char buff[] = "-100 ";
float num;

num = (float)strtof(buff, NULL);
printf("%f -- %s\n", num, buff);

return 0;
}


t34:~/work/wavelets$ ./a.out
1115684864.000000 -- -100

Если поменять функцию strtof, на strtod, то все отлично работает.
p.s.
uname -ar
Linux t34 2.6.28-11-generic #42-Ubuntu SMP Fri Apr 17 01:57:59 UTC 2009 i686 GNU/Linux
p.p.s.
в инете нашел, что если компилировать с --std=c99, то все работает. Но каким образом надо догадаться об этом, и какие "грабли" меня ожидают впереди, для меня пока загадка.

yolki

в мане же чётко написано:

CONFORMING TO
C89 describes strtod C99 describes the other two functions.

psihodog

так я понял, что проблема не в том, что компилятор/линковщик не нашли функции, а в том, что какую-то функцию вставили, которая ерунду вернула. Нет?

xronik111

Открой для себя, что:
- если проблемы с компилятором, то всех интересует версия компилятора, а не операционки;
- не поверишь, у gcc есть пользовательская документация!

Sharp

Основную разработку я веду под FreeBSD, там в man-е про это ничего не сказано. (6.4 и 7.0)
Начал переносить под Линукс, все сразу разломалось... вот и негодую :crazy:

yolki

quad ~/tmp/flocal/test $ gcc -Wall a.c
a.c: В функции ‘main’:
a.c:8: предупреждение: неявная декларация функции ‘strtof’
quad ~/tmp/flocal/test $ gcc -Wall --std=c99 a.c
quad ~/tmp/flocal/test $
-Wall наверное не просто так придумали

Sharp

Да! Если бы он сказал "не знаю такой функции", я бы все понял и начал бы искать куда эта функция делась. А здесь он ни на что не ругается, просто неправильно работает.

Sharp

Под Фрей у меня gcc 4.2, под Linux-ом — gcc 4.3
Судя по инету, народ начал на это жаловаться еще с gcc 3.3

Ivan8209

Используй WARNS=3.
---
"This user is BSD-compliant."

tokuchu

в инете нашел, что если компилировать с --std=c99, то все работает. Но каким образом надо догадаться об этом
В теории дела обстоят так:
Ты используешь функцию, которая описана в стандарте C99, об этом ты должен знать. Как пользоваться компилятором ты тоже должен знать.
Оставить комментарий
Имя или ник:
Комментарий: