【问题标题】:How do I remove "incompatible implicit declaration" warning如何删除“不兼容的隐式声明”警告
【发布时间】:2014-01-20 23:12:34
【问题描述】:

gcc -o hellomake hellomake.c hellofunc.c -I.

如何删除以下警告(在 ubuntu 12.04 上),而不将所有代码放在一个文件中?

hellofunc.c:在函数“myPrintHelloMake”中:hellofunc.c:6:3:警告: 内置函数“printf”的不兼容隐式声明 [默认启用]

三个文件如下:

hellomake.c

#include<stdio.h>   
int main() 
{   // call a function in another file   myPrintHelloMake();   
return(0); 
}

hellofunc.c

#include<hellomake.h> 

void myPrintHelloMake(void) {

printf("Hello makefiles!\n");

return;
}

hellomake.h /* 示例包含文件 */

void myPrintHelloMake(void);

【问题讨论】:

    标签: c


    【解决方案1】:

    由于hellofunc.c 调用printf 你需要在那里#include &lt;stdio.h&gt;

    如果hellomake.c 调用你的myPrintHelloMake 函数,它应该是#include "hellomake.h"

    hellomake.h 也应该有include guards,例如

    #ifndef HELLOMAKE_H_
    #define HELLOMAKE_H_
    
    void myPrintHelloMake(void);
    
    #endif
    

    【讨论】:

      【解决方案2】:

      #inclde&lt;stdio.h&gt; 应该在公共头文件中或单独包含在 hellofunc.c 中。

      【讨论】:

      • @gpuguy 为什么不呢?这对任何 C 程序员来说都是显而易见的,所以你一定有一些严重的误解,但很难知道它是什么。
      • 在“通用”头文件中包含 stdio.h 不是一个好习惯。这意味着它在不需要时被拉入。纯粹为了包含头文件而存在的头文件有点反模式
      猜你喜欢
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 2015-03-18
      • 2013-12-01
      • 2018-03-17
      • 1970-01-01
      相关资源
      最近更新 更多