隐式声明函数’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函数。 这意味着,编译器在遇到对该函数的调用之前应该知道函数签名。 这可以通过两种方式实现
- 在使用之前定义function。
- 提供函数的前向声明并在以后定义。
通常,函数签名通过头文件作为前向声明提供。
根据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
但我仍然不明白为什么顶部的空值。