C 在声明和定义之前,可以调用具有int或void返回类型的函数吗?
我在“Kernighan和Ritchie编写的C编程语言ANSI版本”中读到,如果在实际声明/定义一个函数之前,在另一个函数中调用一个返回类型为int或void的函数,那么它应该工作得很好。但当我在代码块上运行它时,仍然会收到警告C 在声明和定义之前,可以调用具有int或void返回类型的函数吗?,c,ansi,C,Ansi,我在“Kernighan和Ritchie编写的C编程语言ANSI版本”中读到,如果在实际声明/定义一个函数之前,在另一个函数中调用一个返回类型为int或void的函数,那么它应该工作得很好。但当我在代码块上运行它时,仍然会收到警告 #include<stdio.h> #include<conio.h> int main() { display(); } void display() { printf("Hello World\n"); } #包括 #包括
#include<stdio.h>
#include<conio.h>
int main()
{
display();
}
void display()
{
printf("Hello World\n");
}
#包括
#包括
int main()
{
显示();
}
无效显示()
{
printf(“Hello World\n”);
}
警告为:“显示类型冲突”
但如果我将程序更改为:
#include<stdio.h>
#include<conio.h>
void display()
{
printf("Hello World\n");
}
int main()
{
display();
}
#包括
#包括
无效显示()
{
printf(“Hello World\n”);
}
int main()
{
显示();
}
它在没有任何警告的情况下工作。为什么呢?请帮忙 在声明之前,您正在调用
display
。执行此操作时,编译器会对返回值的类型进行假设。它假定它是int
。但定义函数时,使用类型为void
的返回值,这是冲突
很长一段时间以来,没有人认为调用未声明的函数是合理的。因此,在调用之前声明所有函数。最好配置编译器,使其拒绝调用未声明函数的尝试。如果在编译器未看到其原型时调用该函数,则假定返回类型为
int
但是,此功能(称为隐式函数声明)从C99起被删除,您永远不应该依赖它
使用函数声明显然是更好的选择:
void display(void);
int main(void)
{
display();
}
void display(void)
{
printf("Hello World\n");
}
默认情况下,仅假定返回类型为
int
,而不是void
。您必须参考较新的标准。在主函数之前使用函数原型,如下所示:
void display();
int main()
{
display();
}
void display()
{
printf("Hello World\n");
}
您正在声明函数之前调用它。如果你在某个地方读过这本书,就会提到函数原型减速
#include<stdio.h>
#include<conio.h>
void display(void); // function prototype decleration
int main()
{
display();
}
void display()
{
printf("Hello World\n");
}
#包括
#包括
无效显示(无效);//功能原型去宽容
int main()
{
显示();
}
无效显示()
{
printf(“Hello World\n”);
}
希望这有助于定义原型。您也可以闭上眼睛穿过主要道路,但这并不是一个好主意。感谢您向我介绍这个概念。