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



我正在编写一段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

最新更新