加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

这条线的目的是什么? (功能声明)

发布时间:2020-12-16 10:21:04 所属栏目:百科 来源:网络整理
导读:我正在通过K R学习编程.到目前为止还不错,但我不清楚第1.8节(函数)中的一行代码的作用. 在1.8节中,作者向您展示了如何创建一个函数来将一个整数提升到另一个整数的幂. 我已经粘贴了下面的代码,正如书中所写的那样.一切都很好.但我不知道为什么他们把这条线包
我正在通过K& R学习编程.到目前为止还不错,但我不清楚第1.8节(函数)中的一行代码的作用.

在1.8节中,作者向您展示了如何创建一个函数来将一个整数提升到另一个整数的幂.

我已经粘贴了下面的代码,正如书中所写的那样.一切都很好.但我不知道为什么他们把这条线包括在最上面:

int power(int m,int n);

这本书没有提到它,除了说该程序将整数m提高到幂n.如果我从代码中删除该行,程序仍然按预期输出.

如果我理解这一点,就行了

int power(int base,int n)

创建函数,下面的大括号定义函数.然后main下的大括号调用函数输出图表.

所以这一切似乎都有道理.但我不明白最重要的是什么.

这可能是无关紧要的,但我似乎更有可能错过了一些东西.任何人都可以告诉我为什么那条线在那里?

#include <stdio.h>

int power(int m,int n);

/* test power function */
main()
{
int i;

    for (i = 0; i < 10; ++i)
        printf("%d %d %dn",i,power(2,i),power(-3,i));
    return 0;
}

/* power: raise base to n-th power; n >= 0 */

int power(int base,int n)
{
    int i,p;

    p = 1;
    for (i = 1; i <= n; ++i)
        p = p * base;
    return p;
}

解决方法

第一行是函数的声明.底部的代码块是函数的定义.

从1999版ISO C标准开始,在没有可见声明的情况下调用函数是非法的(违反约束);声明必须在通话之前.

对于像这样的简单程序,你可以在main()的定义之前编写power()的完整定义(因为定义也提供了声明),但是对于更复杂的情况(例如递归调用),你经常需要提供单独的声明.

对于较大的程序,通常在头文件(例如foo.h)中收集所有函数声明,并在源文件(例如foo.c)中收集相应的定义. #include“foo.h”指令用于使声明在其他文件中可见.你会在书的后面看到那种事情.

(在1990年和早期版本的C中,这是K& R2所涵盖的,有些情况下你可以在没有可见声明的情况下调用函数 – 但是无论如何提供显式声明仍然是一个非常好的主意.)

顺便说一下,主程序的声明应该是int main(void)而不仅仅是main().

术语:“原型”是一个函数声明,它指定参数的类型.

int power(int base,int n);    /* a declaration that's also a prototype */
int power(int,int);           /* likewise */
int power();                   /* a declaration but not a prototype */

(参数名称在定义中是必需的,但在独立声明中是可选的.)

作为一种特殊情况,没有参数的函数的原型使用(void),因为空括号已经表示非原型声明.所以int main(void)是一个原型,但int main()不是.

非原型声明是“过时的”,这意味着它们理论上可以从未来的语言标准中删除.但它们自1989年以来已经过时,即使在新的2011 ISO C标准中,委员会也认为不适合将它们删除.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读