首页 > 解决方案 > 从 C 中具有结构参数的 varad 函数获取 var args

问题描述

我有这个示例代码,我在其中传递了 count 中的参数数量,然后是不同的类型参数。

struct my_struct;

my_func(int count, char* input_1, my_struct input_2, my_struct input_3);
my_func(int count, char* input_1, my_struct input_2);

如何检索参数?我知道使用 va_arg 给出了主要数据类型的参数,但结构不接受。

标签: cvariadic-functions

解决方案


将非 POD 类型作为可变参数传递是不可移植的。我相信它会在 MSVC 中工作(带有警告),而 clang 会完全拒绝编译它。在其他情况下,它可能会编译(希望带有警告),但不会以您期望的方式执行。

您可以改为在函数中将可变参数作为指针传递:

// Get copy
my_struct input = *va_arg( vl, my_struct* ) ;

或者

// Get reference
my_struct* input = va_arg( vl, my_struct* ) ;

调用可能如下所示:

my_struct a ;
my_struct b ;
...
my_func( 2, str, &a, &b ) ;

推荐阅读