c中函数调用的冲突类型警告

nir*_*jan 2 c function

我正在通过交流代码突然出现意外疑问.下面的代码向我发出警告:conflicting types for 'display',但是当我删除void时它工作正常.
有人可以解释一下我究竟是什么错误吗?提前致谢.

#include<stdio.h>

main(){
    display();
}
void display()
{
    printf("hello world");
}
Run Code Online (Sandbox Code Playgroud)

P.P*_*.P. 5

在C99之前的C中,如果函数原型在函数之前不可用,则编译器假定函数返回一个int.

所以display()假设返回一个int.但是当编译器看到实际的定义时display(),就会发生冲突,因为实际的具有void返回类型.

但是,此隐式int规则已从C99开始删除.所以你的程序在技术上是无效的.你也可以

  • display()在源文件的顶部声明原型,或者
  • 移动display()上面的定义main()