首页 > 解决方案 > 如何检查传递给任何函数的变量参数的数量?

问题描述

我有一个程序,我在其中定义了一个新的打印功能,以所需格式打印一些数据。我正在传递整数和字符串数据类型的变量参数。在打印字符串类型之前,我想检查是否传递了多少个参数以及参数的类型。否则,如果我错误地传递整数并尝试以字符串格式打印,那么我会看到分段错误
下面是我的代码;

void my_print(int log, int flags,....)
{ 
   /* ----------------------
   ----------------------
   ---------------------- */
}

在以所需格式打印参数之前,我想检查传递给此函数的参数数量。有时我传递 5 个参数,有时我传递 6 个参数。

那么 C 语言中是否有任何函数可以检查传递给该函数的参数总数?

标签: cargumentsvariadic-functionsvariadic

解决方案


根据定义(阅读 C11 标准n1570),任何可变参数函数(例如printf)都应该知道何时停止获取参数:参见stdarg(3)

通常的方法是有一个区分前缀参数(就像syslog(3)一样)。您可以有其他约定(例如,在一些全局变量中存储一些描述调用的内容,使用 C 宏等...)。


推荐阅读