Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在大括号中声明函数原型_C_Scope_Function Call_Function Declaration_Function Prototypes - Fatal编程技术网

C 在大括号中声明函数原型

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

在“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(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[])void main(void){{function declaration;}函数原型声明;}
valid?@opol在调用函数之前声明函数很重要。此外,当前的C标准不允许在函数声明未知时调用函数。
double atof( const char [] );
double atof(const char *nptr);