我正在通过一个C代码突然出现意外疑问。以下代码向我发出警告:conflicting types for 'display'
,但是当我删除void时它工作正常
有人可以解释一下我究竟是什么错误吗?提前谢谢。
#include<stdio.h>
main(){
display();
}
void display()
{
printf("hello world");
}
答案 0 :(得分:5)
在C99之前的C中,如果函数原型在函数之前不可用,则编译器假定函数返回int
。
因此假设display()
返回int
。但是当编译器看到display()
的实际定义时,会发生冲突,因为实际的回复类型为void
。
但是,此隐式int规则已从C99开始删除。所以你的程序在技术上是无效的。你可以
display()
的原型,或display()
的定义移到main()
答案 1 :(得分:3)
将函数定义放在main
之前#include<stdio.h>
void display()
{
printf("hello world");
}
main(){
display();
}
当编译器调用一个函数但没有看到它的声明时,它会假定该函数的返回类型为int
考虑到函数main应声明为
int main( void )
这个程序示例似乎来自一本旧书。
现在C标准不支持函数的默认返回类型int
。