4

我想摆脱警告。当我编译源代码时

gcc -Wall -ansi -o test test.c  

我回来

test.c: In function ‘main’:
test.c:12: warning: implicit declaration of function ‘getresuid’
test.c:14: warning: implicit declaration of function ‘seteuid’

当我在没有-ansi开关的情况下编译它时

gcc -Wall -o test test.c 

我在终端上看到

test.c: In function ‘main’:
test.c:12: warning: implicit declaration of function ‘getresuid’

我想使用-ansi开关并摆脱警告。我怎样才能实现我的目标?

/*  this is the test.c */
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

#define __USE_GNU 1
#define __USE_BSD 1

int main()
{
   static uid_t euid, ruid, suid;

   getresuid(&ruid, &euid, &suid);  

   seteuid(getuid()); 

   return 0;
}

环境:

CentOS 6.3 32 位
gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)

4

1 回答 1

11

getresuid()并且seteuid()是 GNU 扩展功能,添加

#define _GNU_SOURCE

包含所有标题之前,或添加-D_GNU_SOURCEGCC 选项。

您不应该__USE_GNU直接定义宏,它应该只在 glibc 内部使用。

于 2013-11-01T06:26:45.343 回答