Recibo la siguiente advertencia cuando compilo:
execute.c:20:2: warning: implicit declaration of function 'execvpe'[-Wimplicit-function-declaration] execvpe("ls", args, envp);^
Tengo entendido que esto ocurre cuando la función que está tratando de usar tiene los tipos de argumentos incorrectos. Sin embargo, estoy bastante seguro de que estoy proporcionando los argumentos correctos para:
int execvpe(const char *file, char *const argv[], char *const envp[]);como se describe en la página del manual de Linux
Aquí están las partes relevantes de mi código:
#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; }¿Alguien sabe por qué me sigue apareciendo este error? ¡Gracias!
"declaración implícita de función" significa que el compilador no ha visto una declaración para esa función. La mayoría de los compiladores, incluido gcc, asumirán que la forma en que se usó la función es correcta y que el tipo de retorno es un int . Esto es generalmente una mala idea. Incluso si usa los argumentos correctamente, aún arrojará este error ya que el compilador no sabe que está usando los argumentos correctamente. La declaración de execvpe solo se incluye si se define _GNU_SOURCE antes de incluir unistd.h, ya que es una extensión de GNU.
Querrás algo como:
#define _GNU_SOURCE #include <unistd.h>