当涉及到具有双重返回类型的函数声明时,K&R 是否过时了?



K&R第二版在函数返回double的函数减速方面是否过时?

第71页说:

调用例程必须知道atof返回一个非int值。确保这一点的一种方法是在调用中显式声明atof例行公事。

这里是第72页的另一个函数,说明了这一点:

/* rudimentary calculator */
main()
{
    double sum, atoif (char []);
    char line[MAXLINE];
    int getline (char line[], int max);
    sum = 0;
    while (getline (line, MAXLINE) > 0)
        printf("t%gn", sum += atof(line));
    return 0;
}

现在在c中有必要这样做吗?还是应该在头文件中与其他返回int的函数一起声明?

正如人们所预料的那样,这本书中有许多东西已经过时了。然而,你似乎误解了这是怎么回事。

这是绝对需要的,甚至比几年前更需要,当一个函数被调用时,编译器需要知道一个函数原型。

对于属于标准C库的函数,必须包含适当的头文件。对于不属于标准C库的函数,如您声明的"atoif",函数内的声明是非常糟糕的做法,最好在头文件中声明并包含它,因为它与当时一样完全合法。

但是…作为一个现在有鳞的恐龙,我记得在以前的K&R时代,我们已经使用头文件来声明函数了!因此,对于这一部分,K&R仍然有效,因为包含头文件并不比声明一堆函数原型少。

旧的K&R和现代C的主要区别在于,在现代C中,我们声明了返回类型和所有参数,而在K&R中,我们只声明了返回类型(并且我们必须在没有编译器帮助的情况下控制自己,确保所有参数都有正确的类型…

最新更新