【发布时间】:2015-05-31 23:43:58
【问题描述】:
我有一个带有特定数量参数的 C 函数(不是 varargs 函数)。例如:
void testfunction(int a, int b, int c);
这个函数是一个黑盒,所以我不能修改它。
在主函数中,我有一个数组,其中包含我想要传递给“testfunction”的所有参数。例如:
void main() {
int args[] = {1, 2, 3};
...
}
假设我事先不知道我的“testfunction”将接受多少个参数(因为这个函数可以改变,取决于我要测试的函数),我该如何调用“testfunction”动态定义数组中的参数?
我对 Ruby 有一些经验,相当于
def test(a, b, c)
...
end
array = [1,2,3]
test(*array)
非常感谢!
【问题讨论】:
-
没有标准的 C 方法可以做到这一点。您将不得不求助于特定于机器的组装技巧,或者为您想要支持的每个数量的参数设置一个长大小写开关。
-
只要您的调用约定是 caller-cleanup,您就可以调用具有比它需要/想要的更多参数的函数。
-
也许我遗漏了一些东西(如果是这样,对不起),但为什么您的测试函数不能接受指向数组和多个参数的指针?
void testfunction(void *arrayPtr, int numArgs)? -
嗯,不知道
_Generic会不会有帮助。 -
@Mawg 问题是“testfunction”是一个黑盒,我无法控制它,我应该可以随时更改它。或者,无论如何,我可以改变一些东西,但我需要它保持完全相同的行为方式。因此,如果我更改它的原型(例如,如您所建议的),每次更改“testfunction”时,我都必须更改对函数主体中参数的所有引用,这有点烦人。