我对c中...之前的参数用法感到困惑。有些人说...之前的参数应该包含可变参数的数量。然而,这对printf()这样的可变函数有什么意义呢?给定的字符数量是否等于可变参数数量的上限?例如:
printf("Hey"); // Printf() is passing 4 characters (including the null one).
// So potentially 4 variadic argument?
或者...之前的最后一个参数只是用于使用va_start初始化va_list?
我认为...之前的参数是用来包含变量参数的数量的,但是如何使用printf()呢?
1条答案
按热度按时间uz75evzq1#
va_arg等宏无法知道你提供了多少个参数。在
printf
的情况下,它会解析格式字符串直到遇到一个空终止符,计算转换说明符的数量,然后祈祷程序员实际上给了它和格式字符串说的一样多的参数。如果程序员没有,那么printf
将疯狂运行。这就是为什么要尽可能地避免变元函数的原因之一,它是C语言最脆弱和最危险的特性之一。