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



我对之前的参数的用法感到困惑…有些人说…之前的参数…应该保存可变参数的数量。然而,这对像printf()这样的可变函数有什么意义呢?给定的字符数量是否等于可以给出多少可变参数的上限?例如:

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

Or是…之前的最后一个参数。只是用来初始化va_list使用va_start?

我以为前面的参数…被用来包含可变参数的数量,但是如何与printf()一起工作呢?

va_arg等宏无法知道您提供了多少个参数。在printf的情况下,它将解析格式字符串,直到遇到空终止符,计算转换说明符的数量,然后祈祷程序员实际上给了它与格式字符串所说的一样多的参数。如果程序员没有这样做,那么printf将会疯狂运行。

这是尽可能避免使用可变函数的众多原因之一。这是C语言最脆弱、最危险的特性之一。

最新更新