【发布时间】:2017-03-23 18:34:40
【问题描述】:
是否可以声明可变参数函数使其不以“...”结尾?
今天我从 unistd.h 了解了更多关于 exec 的信息,但这一天我看到了三个(实际上是两个)不同的 execl 声明:
1) int execl ( const char * path, const char * arg0, ..., (char*)NULL ); 在学校向我们展示过,我想我必须以 NULL 值结束函数调用
2) int execl(const char *path, const char *arg, ... /* (char *) NULL */); 是我在 exec(3) 手册页中找到的。这可能意味着我仍然必须以 NULL 值结束它,但它没有被强制执行。
3) int execl(const char *path, const char *arg, ...); 是我找到的 here。这个可能通常会让我休息,第一个是对学生的简化,第二个是一个 varning,这是真实的(尽管我通常可能会更重视选项一和二。)
但后来我在同一个网站上发现了这个声明:
int execle(const char *path, const char *arg, ..., char * const envp[]);
同样的问题适用,我无法创建不以 ... 结尾的可变参数函数,而 gcc 告诉我它期望 ')' before ',' token 指向三个点后的逗号。
那么最后,是否可以使可变参数函数以 NULL 字符(execl)结尾,如果不能,是否可以使其以预定义变量(execle)结尾?
我尝试用 gcc 6.3.1 编译,我也尝试过 --std=c11。
【问题讨论】:
-
不清楚您的要求。
...必须是参数列表中的最后一个。 1)肯定是错误的,2)是有效的——作为一个小任务:研究原因。而NULL是一个宏,而不是一个字符。
标签: c exec variadic-functions unistd.h