警告:函数的隐式声明“getresuid”(和“seteuid”)

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

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 

我在terminal上看到

 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)

Solutions Collecting From Web of "警告:函数的隐式声明“getresuid”(和“seteuid”)"

getresuid()seteuid()是GNU扩展函数,add

 #define _GNU_SOURCE 

包含所有标题之前 ,或者在GCC选项中添加-D_GNU_SOURCE

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