当前位置: 首页 > 面试题库 >

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

莘光华
2023-03-14
问题内容

我想摆脱警告。当我用

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)


问题答案:

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

#define _GNU_SOURCE

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

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



 类似资料:
  • 拦截警告声 bp MessageBeep 发出系统警告声(如果没有声卡就直接驱动系统喇叭发声)

  • 本文向大家介绍VBA 隐式和显式声明,包括了VBA 隐式和显式声明的使用技巧和注意事项,需要的朋友参考一下 示例 如果代码模块不包含Option Explicit在模块顶部,则编译器将在使用它们时自动(即“隐式”)为您创建变量。它们将默认为变量类型Variant。 在上面的代码,如果Option Explicit指定,代码将中断,因为它缺少必要Dim的陈述someVariable和someOthe

  • 问题内容: 我正在尝试在内核3.13上编译内核模块,但出现此错误: 我用谷歌搜索,没有找到任何回应。这是代码中引用此错误的部分: 我可以得到帮助吗?我真的不知道怎么了 可能是需要补丁的内核3.13。我在内核3.10上读到了内核需要修补的地方。谁能告诉我在哪里可以获得3.13内核补丁来最终解决此问题。谢谢 问题答案: 该错误是因为您没有明确包含声明该函数的标头,并且编译器暗中为您“包含”,这会引发警

  • 我已经在IntelliJ中安装了SonarQube插件,它工作得很好--这是一个巨大的帮助。但是我怎么关闭警告呢?自从我的团队刚开始使用SonarQube以来,我们有成千上万的问题,每一个问题都出现在我的IDE中,这让我分心:( 我不想每次运行分析时卸载插件并重新安装--但我确实希望警告按需消失,这样我就可以集中精力完成一些工作。我可没时间整天解决声纳问题。

  • 在操作栏中为后退箭头定义以在单击工具栏后退箭头时更正为animation之后,将返回警告。摆脱这种警告的最好方法是什么? 方法调用“Add Flags”可能产生“java.lang.NullPointerException”

  • 扩展程序访问网站和大多数 Chrome API 的能力取决于其声明的权限。 权限应仅限于其功能所需。限制权限可以建立扩展程序的功能,并减少攻击者入侵扩展程序导致的数据入侵的可能。通过显式,最小和可选权限来保护扩展及其用户。 整理权限 权限是固定已知的字符串,它们引用 Chrome API 或 match patterns 以赋予对一个或多个主机的访问权限。它们在 manifest 中列出,并指定为