まず、あなたの質問に答えましょう:
#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;
}
それでは、「なぜ?」について話し合い、答えましょう。
非常に古い C プログラム (C89 より前) との互換性のために、最初に関数を宣言せずに関数を使用すると、エラーではなく、GCC からの警告のみが生成されます (ここの最初のコメントで指摘されているように、C89 では暗黙的な関数宣言も許可されています。したがって、エラーを生成することは適切ではありません。これが、警告のみが生成されるもう 1 つの理由です)。 ただし、そのような関数の戻り値の型はint
(たとえば、で指定された型ではないstdlib.h
)と見なされるatoll
ため、プログラムは予期せず実行されますが、エラーは生成されません。でコンパイルすると、次の-Wall
ことがわかります。
警告: 関数の暗黙の宣言atoll
この事実は、期待値が返されない場合、atof
を含めずに使用すると、ほとんどの人に衝撃を与えます。stdlib.h
double
注:(質問のコメントの1つに対する回答としてatoll
)これが、正しいヘッダーが含まれていない場合に結果が切り捨てられる可能性がある理由です。