Topei com isso, que parece um pequeno bug no gcc. Antes, deixem-me explicar que estou escrevendo um carregador de arquivos no formato Wavefront .obj em C. Quando fui tentar ler as coordenadas de vértices topei com essa surpresa.
Aparentemente algumas funções "intrínsecas" não funcionam bem se o respectivo cabeçalho não for incluído (fazendo com as funções deixem de ser "intrínsecas"!):
#include <stdio.h>
void f(void)
{
float x;
x = atof("1.000");
printf("%f\n", x);
}
A função acima imprimirá "0.000000" ao invés de "1.000000".
Mas, se incluir stdlib.h:
#include <stdio.h>
#include <stdlib.h>
void f(void)
{
float x;
x = atof("1.000");
printf("%f\n", x);
}
Então imprimirá "1.000000" - que é o correto!
Alguém mais percebe esse bug por ai?
A versão do GCC em uso é a 4.4.5:
$ gcc --version
gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.