K& R第2版在函数返回double
时功能减速是否过时?
指出:
调用例程必须知道
atof
返回非int
值。 确保这一点的一种方法是在调用中明确声明atof
例程。
这是p.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%g\n", sum += atof(line));
return 0;
}
现在在c中是否有必要,或者声明是否应该与头文件一起返回其他返回整数的函数?
答案 0 :(得分:1)
本书中有很多内容已经过时,正如人们所期望的那样。但是,你似乎误解了这是什么。
绝对需要,甚至比几年前更多,当调用函数时,编译器需要在调用函数时知道函数原型。
对于属于标准C库的函数,必须包含相应的头文件。对于不属于标准C库的函数,例如" atoif"你声明的,函数中的声明是一个非常糟糕的做法,将它在头文件中声明并包含它会更好,把它放在那时完全合法。
答案 1 :(得分:1)
但是......作为一个现在鳞片状的恐龙,我记得在旧的K& R天,我们已经使用了头来宣布功能!所以对于这部分,K& R仍然有效,因为包含一个标题并不比声明一堆函数原型更多。
旧K& RC和现代C之间的主要区别在于,在现代C中我们声明返回类型和所有参数,而在K& R中只声明了返回类型(我们有控制自己没有编译器帮助所有参数都有正确的类型......如果不是SIGSEGV!)