C 函数拭子的隐式声明
编辑:第一段中的警告是因为我从编译器中读取了旧日志(在包括unistd.h之前,很抱歉出现了错误,第二个问题仍然存在) 我有一个使用c函数unlink(在unistd.h中声明)的代码。在使用gcc-Wall编译时,我得到了警告:C 函数拭子的隐式声明,c,gcc,warnings,unistd.h,C,Gcc,Warnings,Unistd.h,编辑:第一段中的警告是因为我从编译器中读取了旧日志(在包括unistd.h之前,很抱歉出现了错误,第二个问题仍然存在) 我有一个使用c函数unlink(在unistd.h中声明)的代码。在使用gcc-Wall编译时,我得到了警告:函数“unlink”的隐式声明现在我知道这只是一个警告,但它有点让我恼火,我想知道解决这个问题的正确方法。我当前的解决方案是简单地添加行extern int unlink(const char*path)到代码,但这似乎有点愚蠢,因为我还包括unistd.h 我曾经收到
函数“unlink”的隐式声明
现在我知道这只是一个警告,但它有点让我恼火,我想知道解决这个问题的正确方法。我当前的解决方案是简单地添加行extern int unlink(const char*path)代码>到代码,但这似乎有点愚蠢,因为我还包括unistd.h
我曾经收到关于使用函数swab(也在unistd.h中声明)的警告,但是在检查了unistd.h之后,我设法通过添加行来解决这个问题
#ifndef __USE_XOPEN
#define __USE_XOPEN
#endif
不确定这样做是否合适,对此的任何见解也将不胜感激。参考您的第二期(“隐式函数声明sawb
”):
替换
#ifndef __USE_XOPEN
#define __USE_XOPEN
#endif
与
。。。将其放在所有其他#include
语句#include
之前,应该可以使用棉签()的原型
#define
以双下划线开头的\uuu
保留供内部使用,不能由程序直接设置。您很可能有打字错误或简单的错误……试试这个
#include <unistd.h>
int
main()
{
int r;
r = unlink("foo");
return(r);
}
上面应该是一个干净的编译。您可以预处理并执行grep以验证是否拉入了unlink声明
sys> gcc -E foo.c | grep unlink
int unlink(const char *);
r = unlink("foo");
嗯,不好,那只是给了我一个关于暗含棉签声明的警告back@cpaitor:您使用的是哪个gcc版本和平台?另外,请参阅我的更新答案。gcc 4.6.2,OpenUse 12.1,我认为\uuu\uu
不能使用,哦,我也更新了我的问题,因为取消链接的警告并不存在,对不起that@cpaitor:(和alk)您应该将特性测试宏定义(#define#XOPEN(u SOURCE
)放在任何包含之前,不仅仅是在之前#包括。否则,某些其他标题可能包括定义swab
的内部标题,并且它将不会再次包含在新的功能测试设置中。@cpaitor:对于swab,否。对于其他接口,可能;函数调用的man
页面应该会告诉您。(500
启用Unix98,600
启用Posix2001,700
启用Posix2008,假设您的标准库实现了这些接口。)如果您必须创建ifdef以使用unlink,那么您的系统中会出现一些非常严重的问题。是的,您可能是对的,这篇文章是更新的HMMMM,编译起来很有魅力。你可能是对的,代码中有一些问题,我不是自己写的,但我一直在努力清理混乱
gcc -Wall foo.c
sys> gcc -E foo.c | grep unlink
int unlink(const char *);
r = unlink("foo");