我正在测试c中的execvpe(),我尝试了下面的代码,导致错误为“隐式声明函数'execvpe'在C99中无效[-Wimplicit-function-declaration]”。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define _GNU_SOURCE
#include <unistd.h>
int main(int argc, char const *argv[])
{
//execl("/bin/echo", "echo", "Hello, world", NULL);
char *path = getenv("PATH");
char pathenv[strlen(path) + sizeof("PATH=")];
sprintf(pathenv, "PATH=%s", path);
char *envp[] = {pathenv, NULL};
char *tests[] = {"ls", "-lR", NULL};
execvpe(tests[0], tests, envp);
fprintf(stderr, "failed to execute \"%s\"\n", tests[0]);
return 0;
}
然后我测试下面的代码来测试现有状态(我从Compiler warnings for execvpe function复制了,这次没有错误。有没有人可以帮我弄清楚上面的代码有什么问题?谢谢!< / p>
#include <unistd.h>
extern int execvpe(const char *file, char *const argv[], char *const envp[]);
答案 0 :(得分:0)
将#define _GNU_SOURCE
指令移到任何#include
指令之前,例如
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
在Glibc中,所有这些标头都会引入features.h
,根据_XOPEN_SOURCE
,_POSIX_SOURCE
,_GNU_SOURCE
等设置设置各种宏。第一个包括,它没有设置。当您到达unistd.h
时,features.h
已经包含在内,并且不会再次应用。