可以调用者不传递额外的参数到可变函数在C?



我有一个可变函数:

void            some_func(
char            arg1,
int             arg2,
char            arg3,
char            arg4,
int             arg5,
char            arg6, ...
) 
{
/* Do some stuff */
}

我可以像下面这样调用函数吗?

  1. some_func('a', 23, 'c', 'd', 56, 'y', "yahoo"); /* yahoo is extra, but valid */
  2. some_func('a', 23, 'c', 'd', 56, 'y'); /* Nothing extra passed, only 6 args, is this allowed??? */

我关心的是第2点。可不如果函数是可变的,在调用中有额外的参数吗?

如果函数是可变的,可以不使用额外的参数吗

是的,这就是变进函数的全部意义。必须给出显式定义的任何参数,但可以传递任意数量或类型的附加参数,包括0。

C标准第6.7.6.3p9节关于函数声明的规定:

如果列表以省略号(, ...)结束,则无信息关于逗号后参数的数量或类型供应。

鉴于"no information about the number…对于逗号后面提供的参数("),不排除传递0个额外参数。

可以。例如,老的int printf(const char * restrict fmt, ...)就是这样工作的。

printf("Hello worldn");

—EDIT—

我找不到任何明确允许零可变参数的措辞。我找到的最好的参考是https://port70.net/~nsz/c/c11/n1570.html#6.7.6.3p19

的一个例子。

例3声明int (*fpfi(int (*)(long), int))(int, ...);声明一个函数fpfi,该函数返回一个指向返回int类型的函数的指针。函数fpfi有两个形参:一个是指向返回int类型(带有一个long int类型形参)的函数的指针,另一个是int类型。fpfi返回的指针指向一个函数,该函数有一个int形参,并接受0个或多个附加实参任意类型

请注意,这些例子不是标准的。

最新更新