随手几行测试代码,编译居然报了一排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 <string.h>

当然,这只是为了追求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/

Categories: Code

Yu

Ideals are like the stars: we never reach them, but like the mariners of the sea, we chart our course by them.

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *