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中,我们只声明了返回类型(并且我们必须在没有编译器帮助的情况下控制自己,确保所有参数都有正确的类型…