我正在编写一段c代码,突然有了一个意外的疑问。下面的代码向我抛出一个警告:conflicting types for 'display'
,但当我删除void时,它可以正常工作
有人能解释一下到底是什么错误吗?提前谢谢。
#include<stdio.h>
main(){
display();
}
void display()
{
printf("hello world");
}
在C99C之前的版本中,如果函数原型在函数之前不可用,编译器会假设函数返回int
。
因此假设CCD_ 3返回一个CCD_。但当编译器看到display()
的实际定义时,会发生冲突,因为实际定义具有void
返回类型。
但是,从C99开始,这个隐式int规则就被删除了。所以你的程序在技术上是无效的。你可以选择
- 在源文件的顶部声明
display()
的原型,或者 - 将
display()
的定义移动到main()
之上
将函数定义放在主之前
#include<stdio.h>
void display()
{
printf("hello world");
}
main(){
display();
}
当编译器调用一个函数但还没有看到它的声明时,它假设该函数具有返回类型int
考虑到功能主体应像一样声明
int main( void )
这个程序示例似乎来自某本旧书。
现在,C标准不支持函数的默认返回类型int
。