代码:
#include <stdio.h>
int navin(); //function declaration
int main()
{
int i = navin(); //function call
}
int navin() //function definition
{
printf("Hello");
}
输出: 你好
问题:
如果我们从上面的代码中删除函数声明行int navin();
,它会打印相同的内容。那为什么要用它?
答案 0 :(得分:1)
此处的函数声明称为forward declaration
。如果函数在定义之前被调用[used] ,则使用此方法。
在您的代码中,请注意,在navin()
内调用main()
时,此时尚未定义该函数。通过使用前向声明,您可以告诉编译器,
&#34;这是功能签名。此函数定义稍后会出现在代码中,继续编译。&#34;
如果没有这个前向声明,大多数c
编译器会向你显示一个警告[称为implicit declaration
],他们无法找到函数navin()
,因此,编译器将假设函数原型为
在大多数情况下,这最终会导致灾难。
您可以在this相关问题中找到更多信息。
深刻用法:头文件。
注:
在较早的c
标准c89
中,这应该只是一个警告,但较新的版本c99
和c11
定义了这个[缺失的前向声明]是一个错误。但是,默认情况下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
}