为什么需要函数声明呢?

时间:2014-12-09 18:13:27

标签: c function forward-declaration

代码:

#include <stdio.h>
int navin();   //function declaration
int main()
{
    int i = navin(); //function call
}
int navin() //function definition
{
     printf("Hello");   
}

输出: 你好

问题:

如果我们从上面的代码中删除函数声明行int navin();,它会打印相同的内容。那为什么要用它?

2 个答案:

答案 0 :(得分:1)

此处的函数声明称为forward declaration。如果函数在定义之前被调用[used] ,则使用此方法。

在您的代码中,请注意,在navin()内调用main()时,此时尚未定义该函数。通过使用前向声明,您可以告诉编译器,

  

&#34;这是功能签名。此函数定义稍后会出现在代码中,继续编译。&#34;

如果没有这个前向声明,大多数c编译器会向你显示一个警告[称为implicit declaration],他们无法找到函数navin(),因此,编译器将假设函数原型为

  • 任意数量的输入参数
  • 返回类型为整数。

在大多数情况下,这最终会导致灾难。

您可以在this相关问题中找到更多信息。

深刻用法:头文件。


注:

在较早的c标准c89中,这应该只是一个警告,但较新的版本c99c11定义了这个[缺失的前向声明]是一个错误。但是,默认情况下gcc [c ++ complier on linux]并没有实现这些标准。如果您明确告诉gcc关注c99及更高版本,则会产生正确的错误消息。

答案 1 :(得分:0)

函数原型显示在文件的顶部。这允许编译器检查代码 更彻底。

我的经验是,如果你没有在程序的顶部声明函数,你也可以在使用之前定义这个函数(在main函数之前)。例如,在你的程序中:

#include <stdio.h> int navin() //function definition { printf("Hello");
} int main() { int i = navin(); //function call }