警告:隐式声明函数'getresuid'(和'seteuid')

时间:2013-11-01 06:20:41

标签: c linux gcc compiler-warnings gcc-warning

我想摆脱警告。当我用

编译源代码时
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)

2 个答案:

答案 0 :(得分:7)

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

#define _GNU_SOURCE

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

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

答案 1 :(得分:3)

我通过添加#include <unistd.h>

解决了