execvpe隐式声明错误

时间:2017-04-12 04:35:21

标签: c

我正在测试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[]);

1 个答案:

答案 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已经包含在内,并且不会再次应用。