如何将大量变量发送到通用函数?

时间:2012-09-02 15:01:52

标签: 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(p, 2);
f(p, 'c');
f(p, 3.14);

3 个答案:

答案 0 :(得分:2)

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

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

f(p, &(int){2});
f(p, &(double){3.14});

但是,函数(正如你已经定义的那样)无法知道你刚刚传递给它的对象有多大,并且一定不能只存储指针值,因为它是一个指针到非常临时变量。

(整数可以转换为指针,但有一些限制,但你必须检查你的实现细节。)

答案 1 :(得分:1)

你可以看一下这个接受类似方式的参数的线程示例:

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

This is source of above example.

答案 2 :(得分:1)

创建一个测试变量数组,然后创建一个for循环来调用它。通过这种方式,您可以直接发送地址,也许这样的地址应该有效:

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

我希望有所帮助。