Вопрос:

предупреждение: неявное объявление функции 'getresuid' (и 'seteuid')

c linux gcc compiler-warnings gcc-warning

4927 просмотра

2 ответа

149 Репутация автора

Я хотел бы избавиться от предупреждений. Когда я компилирую исходный код с

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)

Автор: Igor Источник Размещён: 01.11.2013 06:20

Ответы (2)


7 плюса

101526 Репутация автора

Решение

getresuid()и seteuid()функция расширения GNU, добавить

#define _GNU_SOURCE

перед включением всех заголовков, или добавьте -D_GNU_SOURCEв опции GCC.

Вы не должны определять __USE_GNUмакрос напрямую, он должен использоваться только внутри glibc.

Автор: Yu Hao Размещён: 01.11.2013 06:26

4 плюса

1189 Репутация автора

Я решил, добавив #include <unistd.h>

Автор: Felipe Размещён: 06.09.2018 01:00
Вопросы из категории :
32x32