7

我无法让环礁函数在 c 中正确设置 long long 值。这是我的例子:

#include <stdio.h>

int main(void) {
    char s[30] = { "115" };
    long long t = atoll(s);

    printf("Value is: %lld\n", t);

    return 0;
}

这打印:值是:0

这虽然有效:

printf("Value is: %lld\n", atoll(s));

这里发生了什么?

4

1 回答 1

12

首先,让我们回答您的问题:

#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 中也允许隐式函数声明,因此生成错误是不合适的,这是只生成警告的另一个原因)。 但是假设这样一个函数的返回类型是(例如int不是指定的类型),这就是程序意外执行但没有产生错误的原因。stdlib.hatoll如果你编译-Wall你会看到:

警告:函数的隐式声明atoll

这个事实在人们使用atofwithout include 时最令人震惊stdlib.h,在这种情况下不会返回预期double值。

注意:(作为对问题评论之一的回答atoll)这就是如果不包含正确的标题,结果可能会被截断的原因。

于 2013-03-14T19:50:27.507 回答