C 如何向泛型函数发送大量变量?

C 如何向泛型函数发送大量变量?,c,unit-testing,void-pointers,C,Unit Testing,Void Pointers,我有一个函数f,定义如下: struct s { void *data; struct s *next; }; void f(struct s **p, void *q) { /* ... */ } void * g(struct s **p) { /* ... */ } 我必须测试这些函数,使用很多不同的参数。但是指向void的指针只能包含一个对象地址,对吗?那么,我如何在不使用临时变量(或者在宏中)的情况下,自动执行以下操作呢 临时变量是无法绕过的(好吧

我有一个函数
f
,定义如下:

struct s {
    void *data;
    struct s *next;
};

void
f(struct s **p, void *q)
{
    /* ... */
}

void *
g(struct s **p)
{
    /* ... */
}
我必须测试这些函数,使用很多不同的参数。但是指向
void
的指针只能包含一个对象地址,对吗?那么,我如何在不使用临时变量(或者在宏中)的情况下,自动执行以下操作呢


临时变量是无法绕过的(好吧,你可以使用静态变量,它肯定不是临时的!),因为你需要一个地址,所以你需要一个(非寄存器)变量

但是,这并不意味着您需要额外的代码行:您可以使用类型化初始值设定项(从C99开始):

但是,函数(正如您所定义的)无法知道刚刚传递给它的对象有多大,它不能只存储指针值,因为它是指向非常临时变量的指针


(整数可以转换为指针,然后再转换回来,但有一些限制,但您必须检查您的实现以了解详细信息。)

临时变量是无法绕过的(您可以使用静态变量,它肯定不是临时的!),因为您需要一个地址,因此您需要一个(非寄存器)变量

但是,这并不意味着您需要额外的代码行:您可以使用类型化初始值设定项(从C99开始):

但是,函数(正如您所定义的)无法知道刚刚传递给它的对象有多大,它不能只存储指针值,因为它是指向非常临时变量的指针


(整数可以转换为指针,然后再转换回来,但有一些限制,但您必须检查您的实现以了解详细信息。)

您可以查看这个线程示例,它以类似的方式接受参数:

_beginthread( Bounce, 0, (void *) (structure_of_whatever_variables)  );
                            ^
                            |
                            |
                       This is the parameter of function Bounce

您可以看看这个线程示例,它以类似的方式接受参数:

_beginthread( Bounce, 0, (void *) (structure_of_whatever_variables)  );
                            ^
                            |
                            |
                       This is the parameter of function Bounce

创建一个测试变量数组,并创建一个for循环来逐个调用它。这样,您就可以直接发送地址,或许类似的方式也可以:

for (int i = 0; i < NumOfTestCases; i++)
{
    f(p, &pArrOfTestCases[i]);
}
for(int i=0;i

我希望这会有所帮助。

创建一个测试变量数组,并创建一个for循环来逐个调用它。这样,您就可以直接发送地址,或许类似的方式也可以:

for (int i = 0; i < NumOfTestCases; i++)
{
    f(p, &pArrOfTestCases[i]);
}
for(int i=0;i

我希望这会有帮助。

这是一种标准方式吗?如果存在,
inptr\t
类型为什么存在?可能是关于命名问题,以便更容易理解。这是一种标准方式吗?如果存在,
inptr\t
类型为什么存在?可能是关于命名问题,以便更容易理解这是一个解决方案,但我不能在数组中使用不同类型的变量,不是吗?无论如何,谢谢。这是一个解决方案,但我不能在数组中使用不同类型的变量,不是吗?无论如何谢谢。谢谢,我想我会用这个解决方案。谢谢,我想我会用这个解决方案。