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

b09cbbtk  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(174)

在“C程序设计语言(第二版)”71~ 72 p中,
第二,同样重要的是,调用例程必须知道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()中声明呢?我是个新手,从来没有见过这样的情况。

hgqdbh6s

hgqdbh6s1#

对于C语言早期版本的初学者来说,你可以在调用函数之前不声明它。在这种情况下,默认情况下,函数的返回类型是int。
请注意,一般来说,函数声明不需要提供函数原型。
比较这两个函数声明

int f();

int f( void );

第一个函数声明意味着你不能说任何关于函数参数的数量和类型的信息。
第二个声明实际上是一个函数原型,这意味着该函数没有参数。
因此,如果在程序中有一个函数调用,并且您使用的是旧版编译器,则假定该函数的返回类型为int
要告诉编译器该函数具有不同的返回类型,您需要在函数调用之前声明该函数。
您可以在调用函数的文件作用域或块作用域中声明函数。
此函数声明

double sum, atof(char []);
^^^^^^      ^^^^^^^^^^^^^^

同时,函数原型被放置在main的外部块作用域中,尽管你可以把它放在main之前。在最后一种情况下,函数原型对整个模块都是可见的。
更正确的做法是将函数声明为

double atof( const char [] );

因为通常这样的函数不会改变作为参数传递的字符串。
还要记住,在<stdlib.h>头文件中声明了一个具有相同名称的标准C函数。

double atof(const char *nptr);
bvhaajcl

bvhaajcl2#

这是一种声明函数原型的老方法

相关问题