Tout d'abord, nous allons répondre à votre question:
#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;
}
Ensuite, nous allons discuter et répondre 'pourquoi':
Pour la compatibilité avec de très anciens programmes C (pré-C89), utiliser une fonction sans l'avoir déclarée en premier ne génère qu'un avertissement de GCC, pas une erreur (Comme souligné par le premier commentaire ici, les déclarations de fonctions implicites sont également autorisées en C89, donc générer une erreur ne serait pas approprié, c'est une autre raison pourquoi seulement une guerre ning est généré). Mais le type de retour d'une telle fonction est supposé être int
(pas le type spécifié dans stdlib.h
pour atoll
par exemple), c'est pourquoi le programme s'exécute de manière inattendue mais ne génère pas d'erreur. Si vous compilez avec -Wall
vous verrez que:
Avertissement: Déclaration implicite de la fonction atoll
Ce fait choque la plupart des gens lorsqu'ils utilisent atof
sans inclure stdlib.h
, auquel cas l'attend double
valeur n'est pas retourné.
NOTE: (En réponse à l'un des commentaires de la question) Ceci est la raison pour laquelle peut-être tronquée si l'en-tête correct n'est pas inclus les résultats de atoll
.
http://ideone.com/WntSUK J'ai essayé IDEOne et mon ordinateur, pas de problème? Est-ce tout le code? –
pareil pour moi. a bien fonctionné. – varnie
Quel compilateur, quelle version, y at-il des avertissements ('-Wall' dans GCC). – Zeta