如何使用变量args声明指向函数的指针?
例如int (*my_printf) (FILE *stream, const char *format, ..., void *data) = NULL;
clang的错误是:
a.c:8:56: error: expected ')'
int (*my_printf) (FILE *stream, const char *format, ..., char *data) = NULL;
^
a.c:8:18: note: to match this '('
int (*my_printf) (FILE *stream, const char *format, ..., char *data) = NULL;
^
1 error generated.
当然,我可以简单地将data
参数作为最后一个参数。但我仍然想要一个通用的解决方案
@Jim:
那么,您如何看待execle
函数?
(从man execle
我看到了这一点)
int execle(const char *path, const char *arg,
..., char * const envp[]);
答案 0 :(得分:4)
省略号(...
)必须始终是最后一个正式参数。
答案 1 :(得分:2)
省略号表示法必须在最后,或者它是未定义的行为。
C11§6.9.1功能定义第8小节
如果定义了接受可变数量参数的函数而没有参数 以省略号表示法结尾的类型列表,行为未定义。
至于execle
的原型,你引用的是不正确的,它应该是:
int execle(const char *path, const char *arg0, ... /*,
(char *)0, char *const envp[]*/);
请注意,envp
等位于评论/* */
内。