隐式声明函数’execle’错误

我一直在

函数’execle’的隐式声明在C99中无效

在编译下面的代码时。 我错过了什么?

#include  #include  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; } 

C99 ,不允许隐式声明os函数。 这意味着,编译器在遇到对该函数的调用之前应该知道函数签名。 这可以通过两种方式实现

  1. 在使用之前定义function。
  2. 提供函数的前向声明并在以后定义。

通常,函数签名通过头文件作为前向声明提供。

根据execle()的手册页 ,你需要包含unistd.h来获得前向声明。

您需要包含unistd.h来解决隐式dec警告

我搞定了。 事实certificate这就是陈述的顺序。 在execle之后的任何东西都不会运行。

 #include  #include  #include  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; } 

结果:

 # :$ 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 

但我仍然不明白为什么顶部的空值。