【问题标题】:C warning conflicting typesC 警告冲突类型
【发布时间】:2010-03-12 07:59:53
【问题描述】:

我的代码是

void doc(){
          //mycode                
            return;
           }

我的警告是

conflicting types for 'doc'

任何人都可以解决它。

【问题讨论】:

  • 你可能在某处又定义了一个doc,检查你的包含,错误消息应该告诉你冲突声明也在哪里。

标签: c warnings


【解决方案1】:

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

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

无论如何,最终效果应该是在使用函数原型之前使其可用。

如果你添加

void doc(void);

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢!请解释一下这是为什么?
    • 表示函数的前向声明,是函数的原型。
    【解决方案3】:

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

    喜欢

    int doc();
    void doc()
    { 
    }
    

    会给你这个警告。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • 他也可能在定义之前就使用过这个函数
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        您之前已经声明了doc,或者调用了未声明的doc,从而迫使编译器从该调用中推断出doc 的可能参数声明。现在,您引用的 doc 的定义与之前的声明不同(显式的或由编译器推导出的),这被报告为“冲突”。

        【讨论】:

          【解决方案7】:

          确保您没有在代码中的任何地方使用过 doc!, 我认为这只会给你带来麻烦!

          【讨论】:

            【解决方案8】:

            在用法上方声明函数为我解决了这个问题。

            例子:

            void recordAudio(){  //declaration 
            
                doStuff();
            }
            
            
            void initialise(){ 
            
                recordAudio();    // usage
            }
            

            如上所见,recordAudio() 的用法在 where is used 以上。

            【讨论】:

              【解决方案9】:

              这是因为你在调用函数之前没有创建任何函数原型。 所以编译器默认返回类型为 int 。但是在定义函数时,您使用了返回类型为 void,这与编译器假设相冲突。这就是为什么您会收到错误conflicting types for 'doc'

              可以通过在main前加一个函数原型来解决

              #include <stdio.h>
              
              void doc();
              
              int main()
              {
                  doc();
              }
              
              void doc()
              {
                    //mycode                
                      return;
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2022-11-02
                • 1970-01-01
                • 2014-08-05
                • 1970-01-01
                • 1970-01-01
                • 2016-01-05
                • 1970-01-01
                • 2011-12-25
                相关资源
                最近更新 更多