c - C 中参数数量未知的函数

标签 c function variadic-functions

如何编写(如果可能的话...)一个在 C99 中接受未知数量参数的函数(返回类型是常量)?

最佳答案

是的,您可以使用所谓的可变参数函数在 C 中完成此操作。 标准 printf() scanf() 例如,函数可以执行此操作。

将省略号(三个点)作为您想要“可变数量参数”的最后一个参数。

访问参数包括 <stdarg.h>标题:

#include <stdarg.h>

然后你有一个特殊类型 va_list它为您提供了传递的参数列表,您可以使用 va_start , va_argva_end宏来迭代参数列表。

例如:

#include <stdarg.h>

int myfunc(int count, ...)
{
   va_list list;
   int j = 0;

   va_start(list, count); 
   for(j=0; j<count; j++)
   {
     printf("%d", va_arg(list, int));
   }

   va_end(list);

   return count;
}

调用示例:

myfunc(4, -9, 12, 43, 217);

完整的示例可以在 Wikipedia 找到.

count示例中的参数告诉被调用函数传递了多少个参数。 printf()scanf()通过格式字符串找到它,但是一个简单的 count论证也能做到这一点。有时,代码使用标记值,例如负整数或空指针(请参阅 execl() 例如)。

关于c - C 中参数数量未知的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47854963/

相关文章:

创建目录

c - 我应该缓存 dlsym 的返回值吗?

c - 返回指向函数错误的指针

R重命名函数中传递的列

c++ - 如何根据模板参数包是否与函数参数匹配来控制模板函数定义?

c - 跨编译器的 For 循环问题

php - mysql_fetch_object() 的错误处理 : supplied argument is not a valid MySQL result

function - 在 dolist 中扩展宏

Javascript VArgs - 不理解具有未知输入的参数对象

java - 如何使用可变参数调用 MethodHandle