在大括号中声明函数原型
Declaring a function prototype in a brace
在'The C Programming Language(2nd)'71~72p,
Second, and just as important, the calling routine must know that atof returns a non-int value. One way to ensure this is to declare atof explicitly in the calling routine.
以及包含上述部分的段落下方的代码。
#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()中呢?虽然我是新手,但是没见过这样的。
对于早期 C 版本的初学者,您可以调用函数而无需在函数调用之前声明它。在这种情况下,默认情况下假定该函数具有 return 类型 int.
注意函数声明一般不需要提供函数原型。
比较这两个函数声明
int f();
和
int f( void );
第一个函数声明意味着你不能说函数参数的个数和类型。
第二个声明确实是一个函数原型,这意味着该函数没有参数。
因此,如果在程序中有一个函数调用并且您使用的是旧编译器,则假定该函数具有 return 类型 int
。
要告诉编译器该函数具有不同的 return 类型,您需要在函数调用之前声明该函数。
您可以在文件作用域或调用函数的块作用域中声明函数。
这个函数声明
double sum, atof(char []);
^^^^^^ ^^^^^^^^^^^^^^
同时函数原型被放置在 main 的外部块作用域中,尽管您可以将其放置在 main 之前。在最后一种情况下,函数原型对整个模块都是可见的。
像这样声明函数会更正确
double atof( const char [] );
因为通常这样的函数不会更改作为参数传递的字符串。
另请记住,在 header <stdlib.h>
.
中声明了一个同名的标准 C 函数
double atof(const char *nptr);
在'The C Programming Language(2nd)'71~72p,
Second, and just as important, the calling routine must know that atof returns a non-int value. One way to ensure this is to declare atof explicitly in the calling routine.
以及包含上述部分的段落下方的代码。
#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()中呢?虽然我是新手,但是没见过这样的。
对于早期 C 版本的初学者,您可以调用函数而无需在函数调用之前声明它。在这种情况下,默认情况下假定该函数具有 return 类型 int.
注意函数声明一般不需要提供函数原型。
比较这两个函数声明
int f();
和
int f( void );
第一个函数声明意味着你不能说函数参数的个数和类型。
第二个声明确实是一个函数原型,这意味着该函数没有参数。
因此,如果在程序中有一个函数调用并且您使用的是旧编译器,则假定该函数具有 return 类型 int
。
要告诉编译器该函数具有不同的 return 类型,您需要在函数调用之前声明该函数。
您可以在文件作用域或调用函数的块作用域中声明函数。
这个函数声明
double sum, atof(char []);
^^^^^^ ^^^^^^^^^^^^^^
同时函数原型被放置在 main 的外部块作用域中,尽管您可以将其放置在 main 之前。在最后一种情况下,函数原型对整个模块都是可见的。
像这样声明函数会更正确
double atof( const char [] );
因为通常这样的函数不会更改作为参数传递的字符串。
另请记住,在 header <stdlib.h>
.
double atof(const char *nptr);