implicit declaration of function ‘xxx’

随手几行测试代码,编译居然报了一排warning,仔细查看,都是类似如下格式的:

xxx\xx.c||In function 'xxx':|
xxx\xx.c|14|warning: implicit declaration of function 'memset' [-Wimplicit-function-declaration]|
xxx\xx.c|14|warning: incompatible implicit declaration of built-in function 'memset' [enabled by default]|

文件大致是如下的:

#ifndef __MAIN_H__
#define __MAIN_H__
#include
// ... sth else
#endif // __MAIN_H__

#include "main.h"
#include
int main(void)
{
char code[41];
// ... sth else
memset((void *)code,0,41);
// .......
return 0;
}

一种解决

stackoverflow 有人出现同样的warning,解决方法就是在前面加个函数声明即可。

不过和自己的代码对比了下,看起来只是警告提示相同而已。

我的解决

再翻了一下,找到了这么一段话:

It seems that your header files have no prototype declared for some of the functions, so the function itself is implicitly treated as the function prototype. It’s actually only a warning, and depending on your compilation flags it should compile even so, so it’s no reason to panic. Then again, it shouldn’t be a big task to add the prototype to one of your headers or at least add on top of the same source file.

memset函数是头文件string.h中的,虽然在main.h中已经声明了string.h,但开启Wall后，在main.c需要再次声明#include

当然,这只是为了追求0 error 0 warning而已,即便无视这个warning其实也没啥的.

其他

没有”gcc错误提示意味着什么”之类的书籍,所以不能确定是否还有其他可能

References

[1] Implicit declaration http://stackoverflow.com/questions/9453587/implicit-declaration [2] warning: implicit declaration of function http://www.linuxquestions.org/questions/linux-software-2/warning-implicit-declaration-of-function-329563/