我有一个函数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);
答案 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
答案 2 :(得分:1)
创建一个测试变量数组,然后创建一个for循环来调用它。通过这种方式,您可以直接发送地址,也许这样的地址应该有效:
for (int i = 0; i < NumOfTestCases; i++)
{
f(p, &pArrOfTestCases[i]);
}
我希望有所帮助。