问题
I keep getting
implicit declaration of function 'execle' is invalid in C99
when compiling the code below. What am I missing?
#include <stdio.h>
#include <stdlib.h>
char *my_env[] = {"JUICE=PEACH and apple", NULL};
int main (int argc, char *argv[])
{
execle ("diner_info", "diner_info", "4", NULL, my_env);
printf ("Diners: %s\n", argv[1]);
printf ("Juice: %s\n", getenv("JUICE"));
return 0;
}
回答1:
In C99
, the implicit declaration of a function is not allowed. That means, the compiler should be aware of the function signature before it encounters a call to that function. This can be achieved two ways:
- Define the function before using it.
- Provide a forward declaration of the function and define it later.
Usually, the function signature is provided as a forward declaration through the header files.
As per the man page of execle()
, you need to include unistd.h
to get the forward declaration.
回答2:
You need to include unistd.h to resolve the implicit dec warning
回答3:
I got it working. That's the order the statements should be as it turns out. Anything after execle won't run.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char *my_env[] = {"JUICE=PEACH and apple", NULL};
int main (int argc, char *argv[])
{
printf ("Diners: %s\n", argv[1]);
printf ("Juice: %s\n", getenv("JUICE"));
execle ("diner_info", "diner_info", "4", NULL, my_env);
return 0;
}
Result:
# :$ gcc diner_info.c -o diner_info && ./diner_info
Diners: (null)
Juice: (null)
Diners: 4
Juice: PEACH and apple
Diners: 4
Juice: PEACH and apple
Diners: 4
Juice: PEACH and apple
Diners: 4
Juice: PEACH and apple
Diners: 4
Juice: PEACH and apple
Diners: 4
Juice: PEACH and apple
But I still don't understand why the null values on the top, though.
来源:https://stackoverflow.com/questions/31344650/implicit-declaration-of-function-execle-error