第一个函数调用分配变量。隐含声明?

时间:2014-04-06 17:59:03

标签: c function

考虑,

    #include<stdio.h>
    int main()
    {
    int y = facto(6);
    printf("%d",y);
    return 0;
    }

    int facto(int x)
    {
    if(x==1)
      return 1;
    else 
      return x*facto(x-1);
    }

我在一些帖子中读过,这些帖子说在定义之前调用一个函数是一个隐式声明。这个陈述如何覆盖(“y = facto(6)”),一个隐含的声明?

在Ubuntu 64位上使用GCC 4.8.1。

2 个答案:

答案 0 :(得分:3)

y=facto(6)是一个隐式声明,因为你告诉编译器&#34;我想调用一个函数并传递一个int,所以在某个地方会有一个函数只有一个int参数。&#34;

如果编译器首先遇到int facto(int x),那么这就是显式声明。

隐式声明是危险的,因为编译器不会说&#34;嘿,这与我已经为该功能找到的东西不匹配。&#34;

答案 1 :(得分:2)

声明,是说编译器在你的情况下有函数facto,在某处定义。你没有说这个函数有多少和哪个类型参数,在你的情况下甚至没有说它有哪种返回类型。它只是偶然使用,因为您使用了int这是默认的返回类型。如果您将函数定义为此类

  char facto(int x){...}

你会收到错误。所以不要以这种方式使用函数,要么使用原型,要么在使用它们之前定义函数。这里有一些有用的链接:

1 2