用变量args声明函数指针

时间:2013-12-17 00:59:12

标签: c

如何使用变量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[]);

enter image description here

2 个答案:

答案 0 :(得分:4)

省略号(...)必须始终是最后一个正式参数。

答案 1 :(得分:2)

省略号表示法必须在最后,或者它是未定义的行为。

  

C11§6.9.1功能定义第8小节

     

如果定义了接受可变数量参数的函数而没有参数   以省略号表示法结尾的类型列表,行为未定义。

至于execle的原型,你引用的是不正确的,它应该是:

int execle(const char *path, const char *arg0, ... /*,
   (char *)0, char *const envp[]*/);

请注意,envp等位于评论/* */内。