C警告冲突类型

时间:2010-03-12 07:59:53

标签: c warnings

我的代码是

void doc(){
          //mycode                
            return;
           }

我的警告是

conflicting types for 'doc'

任何人都可以解决它。

9 个答案:

答案 0 :(得分:27)

在C中,如果在调用函数时没有函数原型,则假定它返回int并采用未指定数量的参数。然后,当您稍后将函数定义为返回void并且不带参数时,编译器会将此视为冲突。

根据代码的复杂程度,您可以执行一些简单的操作,例如在使用函数之前移动函数的定义,或者在头文件中添加函数声明并包含它。

在任何情况下,净效果应该是在使用函数原型之前使其可用。

如果你添加

void doc(void);

在使用函数之前,您将在范围内看到原型,并且您的警告将消失。

我认为这是您警告的最可能原因。您可能在代码中有doc明确不兼容的声明,但我们无法分辨,因为您尚未发布完整的代码。

答案 1 :(得分:13)

尝试在程序文件中的main函数之前编写doc函数。

答案 2 :(得分:4)

你已经用其他类型/签名声明它并用其他类型/签名定义..

喜欢

int doc();
void doc()
{ 
}

会给你这个警告。

答案 3 :(得分:3)

这显然不是您的完整代码。

但是,该错误意味着doc还有另一个声明(可能是一个全局变量?头文件中的某些内容?),它不是不带参数的void函数。

答案 4 :(得分:2)

“doc”可能已经用不同的类型声明了...... 你应该试着找到以前的声明!

答案 5 :(得分:2)

您之前已声明doc,或调用未声明的doc,因此强制编译器从该调用推断出doc的可能参数声明。现在,您引用的doc的定义与之前的声明(显式的或由编译器推断的)不同,这被称为“冲突”。

答案 6 :(得分:2)

确保您没有在代码中的任何位置使用过doc! 我想这只会给你带来麻烦!

答案 7 :(得分:0)

声明上面的功能使用解决了它。

示例:

void recordAudio(){  //declaration 

    doStuff();
}


void initialise(){ 

    recordAudio();    // usage
}

如上所示,recordAudio()的使用率高于使用的位置。

答案 8 :(得分:0)

这是因为在调用函数之前没有创建任何函数原型。 因此,编译器默认将返回类型假定为int。但是,在定义函数时,您已将返回类型用作void,这与编译器假设存在冲突。这就是为什么您遇到错误“文档”的类型冲突

的原因

您可以通过在main之前添加函数原型来解决它

#include <stdio.h>

void doc();

int main()
{
    doc();
}

void doc()
{
      //mycode                
        return;
}