【发布时间】:2020-11-16 10:03:50
【问题描述】:
在“C 编程语言(第 2 期)”71~72p,
其次,同样重要的是,调用例程必须知道 atof 返回一个非整数值。确保这一点的一种方法是在调用例程中显式声明 atof。
以及包含上述部分的段落下方的代码。
#include <stdio.h>
#define MAXLINE 100
/* rudimentary calculator */
main()
{
double sum, atof(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;
}
函数原型通常在顶部声明。但是为什么函数原型double atof(char[])会在main()中声明呢?虽然我是新手,但从没见过这样的。
【问题讨论】:
-
在哪里声明它并不重要。只需要在使用前声明即可。
-
因为这是 “一种确保 [调用例程知道 atof 返回非整数值]”的方法。,根据引用。
-
又名“(如何滥用)C 编程语言”。您可能想阅读另一本不太关注如何不编写代码的书。因为这段代码是 100% 可怕的。
atof不应该首先使用,因为它的错误处理,总是使用strtof。 -
@Lundin 我想你的意思是
strtod在这种情况下。 -
@opol 我刚刚编的,但是这本书已经过时了,而且使用的编码风格有害且难以遵循。并且它教会你依赖于不明确的行为,因为它是在任何标准化之前编写的,并且在第二版中转换为 C90 是草率的。任何在一本旨在教授 C 的书中写诸如
double sum, atof(char []);之类的东西的人都不应该教 C,时期。任何在生产代码中编写类似内容的人都会被解雇。
标签: c scope function-call function-declaration function-prototypes