Zuerst lassen Sie uns Ihre Frage beantworten:
#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;
}
Dann wollen wir diskutieren und Antwort 'warum?':
Für die Kompatibilität mit sehr alten C-Programmen (pre-C89), eine Funktion zu verwenden, ohne sie vorher zu deklarieren, erzeugt nur eine Warnung von GCC, keinen Fehler (Wie der erste Kommentar hier anmerkte, sind auch implizite Funktionsdeklarationen in C89 erlaubt, daher wäre die Erzeugung eines Fehlers nicht sinnvoll, das ist ein anderer Grund warum nur ein Krieg ning wird erzeugt). Es wird jedoch angenommen, dass der Rückgabetyp einer solchen Funktion int
ist (nicht der in stdlib.h
für atoll
angegebene Typ), weshalb das Programm unerwartet ausgeführt wird, aber keinen Fehler generiert. Wenn Sie mit -Wall
kompilieren werden Sie sehen, dass:
Warnung: Implizite Deklaration der Funktion atoll
Diese Tatsache vor allem Menschen schockiert, wenn sie atof
verwenden, ohne stdlib.h
einschließlich, in welchem Fall der double
Wert erwartet wird nicht zurückgegeben.
HINWEIS: (Als Antwort auf eine der Bemerkungen der Frage) Dies ist der Grund, warum die Ergebnisse der atoll
möglicherweise abgeschnitten werden, wenn die richtigen Header nicht enthalten ist.
http://ideone.com/WntSUK Sie haben sowohl IDEOne als auch meinen Computer getestet, keine Probleme? Ist das alles der Code? –
das gleiche für mich. gut gearbeitet. – varnie
Welcher Compiler, welche Version, gibt es irgendwelche Warnungen ('-Wall' in GCC). – Zeta