尝试使用execvpe(…)但得到隐式声明错误 – 即使我想我使用正确的参数types

编译时出现以下警告:

execute.c:20:2: warning: implicit declaration of function 'execvpe'[-Wimplicit-function-declaration] execvpe("ls", args, envp); 

^

我的理解是,当您尝试使用的函数具有不正确types的参数时,会发生这种情况。 但是,我很确定我正在提供正确的参数:

 int execvpe(const char *file, char *const argv[], char *const envp[]); 

如Linux手册页中所述

以下是我的代码的相关部分:

 #include <unistd.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <stdlib.h> #include <string.h> void test_execvpe(char* envp[]) { const char* temp = getenv("PATH"); char path[strlen(temp)+1]; strcpy(path, temp); printf("envp[%d] = %s\n", 23, envp[23]); //print PATH char* args[] = {"-l", "/usr", (char*) NULL}; execvpe("ls", args, envp); } int main( int argc, char* argv[], char* envp[]) { //test_execlp(); test_execvpe(envp); return 0; } 

任何人都知道我为什么不断收到这个错误 谢谢!

“隐式函数声明”表示编译器没有看到该函数的声明。 大多数编译器,包括gcc,都会认为函数的使用方式是正确的,返回类型是int 。 这通常是一个坏主意。 即使正确使用参数,它仍会抛出此错误,因为编译器不知道您正在使用参数。 execvpe的声明只有在包含unistd.h之前定义_GNU_SOURCE因为它是一个GNU扩展名。

你会想要的东西,如:

 #define _GNU_SOURCE #include <unistd.h>