我在《The C Programming Language ANSI edition by Kernighan and里奇》一书中读到,如果我在实际声明/定义一个函数之前,在另一个函数中调用一个返回类型为int或void的函数,它应该可以完美地工作。但是当我在代码块上运行它时,我仍然会得到一个警告。
#include<stdio.h>
#include<conio.h>
int main()
{
display();
}
void display()
{
printf("Hello World\n");
}
警告是:“显示的类型冲突”。
但如果我把程序改成:
#include<stdio.h>
#include<conio.h>
void display()
{
printf("Hello World\n");
}
int main()
{
display();
}
它在没有任何警告的情况下工作。为什么会这样?请帮助。
5条答案
按热度按时间6mzjoqzu1#
你在声明
display
之前调用它。当你这样做时,编译器会假设返回值的类型。它假设它是int
。但是当你定义函数时,你使用了一个类型为void
的返回值,这就是冲突。很久没有人认为调用没有声明的函数是合理的了。所以,在调用函数之前声明所有的函数。最好配置你的编译器,使它拒绝调用没有声明的函数的尝试。
e5nqia272#
如果你读过这本书,里面提到过函数原型减速。
希望这有助于始终定义一个原型。
2w3kk1z53#
在main函数之前使用一个函数原型,如下所示:
af7jpaap4#
如果在编译器还没有看到其原型时调用函数,则假定返回类型为
int
。但是,这个功能(称为隐式函数声明)从C99开始就被删除了,你永远不应该依赖它。
使用函数声明显然是更好的选择:
ej83mcc05#
默认情况下只假设
int
返回类型,而不是void
。您必须参考更新的标准。