我正在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_SOURCEunistd.h等的设置来设置各种宏。在第一次包含时,未设置它。当您转到features.h时,已经包含在内,将不再应用。

关于c - execvpe隐式声明错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43360387/

10-11 15:45