Najpierw odpowiedzieć na pytanie:
#include <stdio.h>
#include <stdlib.h> // THIS IS WHAT YOU ARE MISSING
int main(void) {
char s[30] = { "115" };
long long t = atoll(s);
printf("Value is: %lld\n", t);
return 0;
}
Następnie omówmy i odpowiedź 'dlaczego?':
dla kompatybilności z bardzo starych programów C (pre-C89) używanie funkcji bez zadeklarowania jej jako pierwszego generuje ostrzeżenie z GCC, a nie błąd (jak wskazano tutaj w pierwszym komentarzu, również domyślne deklaracje funkcji są dozwolone w C89, dlatego generowanie błędu nie byłoby właściwe, to jest kolejny powód dlaczego tylko wojna ning jest generowany). Jednak przyjmuje się, że typ powrotu takiej funkcji to int
(nie jest to typ określony w stdlib.h
dla atoll
), dlatego program wykonuje się nieoczekiwanie, ale nie generuje błędu. Jeśli skompilować z -Wall
widać, że:
Warning: niejawnej deklarację funkcji atoll
Fakt głównie szokuje ludzi kiedy używają atof
bez tym stdlib.h
, w którym to przypadku spodziewany double
wartości nie jest zwracane.
UWAGA: (W odpowiedzi na jeden z komentarzy z pytaniem) To jest powód, dlaczego wyniki atoll
może być obcięta, jeśli poprawny nagłówek nie jest wliczony w cenę.
http://ideone.com/WntSUK Próbowałem zarówno IDEOne, jak i mojego komputera, bez problemów? Czy to cały kod? –
to samo dla mnie. działało dobrze. – varnie
Jaki kompilator, w jakiej wersji, istnieją ostrzeżenia ('-Wall' w GCC). – Zeta