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

时间:2015-07-04 08:57:28

标签: c function

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

#include<stdio.h>

main(){
    display();
}
void display()
{
    printf("hello world");
}

2 个答案:

答案 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