6

在下面的程序中,我使用了两个函数 prd() 和 display()。在 main() 中调用它们之前,我没有在 main() 之前声明它们,并且我在 main() 之后定义了它们。然而 prd( ) 在 main() 中运行顺利,调用 display() 会显示警告“先前隐式声明 'display' 在这里”。 display() 有什么不同之处在于它有一个警告,但其他功能 prd() 没有?我一开始都没有声明它们。由于调用一个,仍然有警告,但另一个工作正常。

    #include<stdio.h>

    int main()
    {
        int x=8,y=11;

        printf("The product of %d & %d is %d",x,y,prd(x,y));

        display();

        return 0;
    }

    int prd(int x,int y)
    {
        return x*y;
    }

    void display()
    {
        printf("\n Good Morning");
    }

PS:如果你能回答这个次要问题,我将不胜感激——“如果有定义,函数声明在 C 中根本不需要吗?”。我有在 main 之前声明程序的所有函数的习惯() 函数,然后在 main() 函数之后定义它们。我错了吗?

4

3 回答 3

9

当您使用 undeclared 时display(),编译器会隐式声明它,就好像它正在返回一样int

当编译器最终看到 的定义时display(),它会看到返回类型是void,但它已经假定它是int,因此定义和隐式声明不同,因此出现错误/警告。

于 2013-04-02T04:42:32.673 回答
4

发生错误是因为 C 认为所有未启动的函数的返回类型为int. 您的display函数稍后使用void返回类型定义。

将返回类型更改display()int删除警告。

于 2013-04-02T04:43:50.353 回答
2

默认情况下,编译器假定未声明的函数为返回int

这对您的prd函数来说是正确的,但它与display()它的void. 这会导致编译器发出警告。

第二,声明函数总是合适的。

于 2013-04-02T04:44:31.277 回答