C 在大括号中声明函数原型
在“C编程语言(第2版)”71~72p中 其次,同样重要的是,调用例程必须知道atof返回一个非int值。确保这一点的一种方法是在调用例程中显式声明atof 以及包含上述部分的段落下的代码C 在大括号中声明函数原型,c,scope,function-call,function-declaration,function-prototypes,C,Scope,Function Call,Function Declaration,Function Prototypes,在“C编程语言(第2版)”71~72p中 其次,同样重要的是,调用例程必须知道atof返回一个非int值。确保这一点的一种方法是在调用例程中显式声明atof 以及包含上述部分的段落下的代码 #include <stdio.h> #define MAXLINE 100 /* rudimentary calculator */ main() { double sum, atof(char []); char line[MAXLINE]; int getline
#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;
}
#包括
#定义MAXLINE 100
/*初级计算器*/
main()
{
双和,atof(char[]);
字符行[MAXLINE];
int getline(字符行[],int max);
总和=0;
而(getline(line,MAXLINE)>0)
printf(“\t%g\n”,sum+=atof(行));
返回0;
}
函数原型通常在顶部声明。但是为什么函数原型
double-atof(char[])
是在main()中声明的呢?尽管我是个新手,但我从未见过这样的情况。对于早期版本的C初学者来说,您可以调用函数,而不必在函数调用之前声明它。在本例中,默认情况下假定函数的返回类型为int
请注意,通常情况下,函数声明不需要提供函数原型
比较这两个函数声明
int f();
及
第一个函数声明意味着您不能谈论函数参数的数量和类型
第二个声明实际上是一个函数原型,这意味着函数没有参数
因此,如果在一个程序中有一个函数调用,并且您正在使用一个旧的编译器,则假定该函数具有返回类型int
要告诉编译器函数具有不同的返回类型,您需要在函数调用之前声明函数
可以在调用函数的文件范围或块范围中声明函数 此函数声明
double sum, atof(char []);
^^^^^^ ^^^^^^^^^^^^^^
同时,函数原型被放置在main的外部块范围内,尽管您可以将其放置在main之前。在最后一种情况下,整个模块都可以看到功能原型
将函数声明为
double atof( const char [] );
因为通常这样的函数不会更改作为参数传递的字符串
还请记住,有一个标准的C函数,其名称与标题
中声明的名称相同
你在哪里申报并不重要。只需要在使用它之前声明它。因为这是“确保[调用例程知道atof返回非int值]的一种方法”,根据quote.Aka(如何滥用)C编程语言)。您可能想读一本不同的书,不太关注如何不编写代码。因为这个代码是100%可怕的
atof
首先不应该使用,因为它的错误处理,请始终使用strtof
。@Lundin我想你的意思是在这种情况下使用strtod
。@opol我刚才编的,但是这本书已经过时了,使用的编码风格有害且难以遵循。它告诉你要依赖于不规范的行为,因为它是在任何标准化之前编写的,并且在第二版中转换成C90是草率的。任何人写的东西,如双和,atof(char[])在一本教C的书中,不应该教C,句号。任何在生产代码中编写类似内容的人都会被解雇。“你可以在调用函数的文件范围或块范围中声明函数。”这对我帮助很大。我想再问一个问题。如果函数原型声明在函数之外,那么函数原型位于函数之前还是之后并不重要?例如,结构是否为void main(void){{function declaration;}函数原型声明;}
valid?@opol在调用函数之前声明函数很重要。此外,当前的C标准不允许在函数声明未知时调用函数。
double atof( const char [] );
double atof(const char *nptr);