警告:函数的隐式声明

3

我在使用C语言编程,我的gcc编译器在mySecondFile.c中的函数调用中给了我以下警告:

implicit declaration of function 'func'

该函数原型在myfile.h中声明为:

void  func(char*);

函数定义在myfile.c中。

void  func(char*x);

mySecondFile.c 包含:

#include "myfile.h"

func("Hello");

我不明白这会引发什么投诉。

2
你能展示这些文件的完整内容吗(将它们减少到最小的内容,仍然能够重现错误)?像这样的事情细节至关重要。 - Michael Burr
尝试使用“-Wall -Wextra -pedantic”编译,看看是否还有其他问题。 - icktoofay
1个回答

7
那个错误是因为在你调用它的时候,func没有被声明。看起来你的头文件不像你描述的那样。也许有一些条件代码。也许你有一个头文件保护没有正常工作。另一个可能性是你声明了函数Func但是调用它的时候使用了func小写字母拼写。很难说没有看到实际的文件,但你需要寻找funcmySecondFile.c翻译单元中未被声明的原因。
为了更清楚地说明这一点,以下代码:
int main(void)
{
    func("Hello");
    return 0;
}

导致此警告的结果:

prog.c: In functionmain’:
prog.c:3: warning: implicit declaration of functionfunc

根据您的描述,您的代码包含一个声明func的头文件。然而,编译器不同意您的观点,现在需要您自己找出为什么func没有被声明。

这正是您所报告的情况。


因此,在.h文件中的函数声明周围有一个#ifdef导致了这个问题。 - SSS
@SS。那些ifdef语句真的会让你感到困惑! - David Heffernan
@SS:鉴于这篇文章已经被浏览了将近9000次,你应该正式接受David Heffernan的答案。 - Rob Johansen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接