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

时间:2014-08-24 14:13:29

标签: c

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中是否有必要,或者声明是否应该与头文件一起返回其他返回整数的函数?

2 个答案:

答案 0 :(得分:1)

本书中有很多内容已经过时,正如人们所期望的那样。但是,你似乎误解了这是什么。

绝对需要,甚至比几年前更多,当调用函数时,编译器需要在调用函数时知道函数原型。

对于属于标准C库的函数,必须包含相应的头文件。对于不属于标准C库的函数,例如" atoif"你声明的,函数中的声明是一个非常糟糕的做法,将它在头文件中声明并包含它会更好,把它放在那时完全合法。

答案 1 :(得分:1)

但是......作为一个现在鳞片状的恐龙,我记得在旧的K& R天,我们已经使用了头来宣布功能!所以对于这部分,K& R仍然有效,因为包含一个标题并不比声明一堆函数原型更多。

旧K& RC和现代C之间的主要区别在于,在现代C中我们声明返回类型和所有参数,而在K& R中只声明了返回类型(我们有控制自己没有编译器帮助所有参数都有正确的类型......如果不是SIGSEGV!)