函数拭子的隐式声明

时间:2013-11-15 17:12:17

标签: c gcc warnings unistd.h

编辑:第一段中的警告是由于我从编译器中读取旧日志(包括unistd.h之前,抱歉错误,第二个问题仍然存在) 我有一个代码,它使用了c函数unlink(在unistd.h中声明)。在使用gcc -Wall进行编译时,我收到警告:implicit declaration of function ‘unlink’现在我现在这只是一个警告,但它有点让我恼火,我想要解决这个问题的正确方法。我目前的解决方案是简单地将行extern int unlink(const char *path);添加到代码中,但这似乎有点傻,因为我还包括unistd.h

我曾经收到过关于使用函数swab(也在unistd.h中声明)的警告,但在检查unistd.h之后,通过添加行来解决这个问题

#ifndef __USE_XOPEN
#define __USE_XOPEN 
#endif

不确定这是否正确,所以对此的任何见解也将受到赞赏。

2 个答案:

答案 0 :(得分:1)

参考你的第二个问题(“隐含声明函数sawb”):

替换

#ifndef __USE_XOPEN
#define __USE_XOPEN 
#endif

#define _XOPEN_SOURCE

...将其置于所有其他#include语句之前 #include <unistd.h> 应该可以使swab()的原型设置可用。


以双下划线#define开头的

__保留供内部使用,不得由程序直接设置。

答案 1 :(得分:1)

你很可能有一个错字或一些简单的错误.....试试这个。

#include <unistd.h>

int
main()
{
    int r;  

    r = unlink("foo");

    return(r);
}

编译

gcc -Wall foo.c

上面应该是一个干净的编译。您可以预处理并执行grep以验证是否已拉入取消链接声明。

sys> gcc -E foo.c | grep unlink
int unlink(const char *);
 r = unlink("foo");