我正在c中测试execvpe(),我尝试了以下代码,由于“在C99 [-Wimplicit-function-declaration]中函数'execvpe'的隐式声明无效”,导致了错误。
#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复制的,这次没有错误。是否有人可以帮助我弄清楚我上面的代码有什么问题?谢谢!
#include <unistd.h>
extern int execvpe(const char *file, char *const argv[], char *const envp[]);
最佳答案
将#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
时,已经包含在内,将不再应用。关于c - execvpe隐式声明错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43360387/