C语言 变元参数之前的参数是什么?

zdwk9cvp  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(132)

我对c中...之前的参数用法感到困惑。有些人说...之前的参数应该包含可变参数的数量。然而,这对printf()这样的可变函数有什么意义呢?给定的字符数量是否等于可变参数数量的上限?例如:

printf("Hey"); // Printf() is passing 4 characters (including the null one).
               // So potentially 4 variadic argument?

或者...之前的最后一个参数只是用于使用va_start初始化va_list?
我认为...之前的参数是用来包含变量参数的数量的,但是如何使用printf()呢?

uz75evzq

uz75evzq1#

va_arg等宏无法知道你提供了多少个参数。在printf的情况下,它会解析格式字符串直到遇到一个空终止符,计算转换说明符的数量,然后祈祷程序员实际上给了它和格式字符串说的一样多的参数。如果程序员没有,那么printf将疯狂运行。
这就是为什么要尽可能地避免变元函数的原因之一,它是C语言最脆弱和最危险的特性之一。

相关问题