动态调用具有可变参数的函数

时间:2015-10-06 23:25:45

标签: c function variables arguments text-files

是否有可能动态地从C代码调用带有变量参数的函数?

例如,我的文本文件包含数据(使用此方案编写:function_name参数),例如:

func1 1 2 3
func2 1
func3

我用C编写的程序正在解析这个文件,并通过比较字符串并使用来自的参数调用此函数的指针来查找具有给定名称的函数的填充数组(其中包含字符串和目标本机函数指针中的函数名)文本文件。例如这样的函数:

void func1(int a, int b, int c) { }
void func2(int a, int b) { }
void func3() { }

问题是即使我知道参数的数量,我也不知道如何在C函数指针调用中写入动态数量的参数。是否有可能填充va_list(我知道这不是容器或典型数组!)然后传递给本机函数或任何其他方式来执行此操作?我想到的唯一方法是使用x86代码填充dynarec块,以便使用可变参数调用本机函数,但这不是一个干净的解决方案。在普通的C中这样的事情是否可能?

如果难以理解只是写,我会尝试更好地解释。如果你想写“使用va_list” - 那么请仔细阅读我的帖子。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我喜欢你的思维方式,因为很明显,你是一个真正的黑客,但是......

不要尝试这样做

执行此操作的正确方法是更改​​这些函数,以便每个函数都接受int而不是单个int参数的数组。但我想如果你有改变它们的自由,那么你就已经做到了,你就不会这么做了。

下一个最好的方法是编写一些函数,conv1()conv2()conv3()等,每个函数接受一个int数组,以及指向接受单个int参数的函数的指针。因此,convN()接受一个N整数数组,以及一个指向接受Nint个参数的函数的指针。它从数组中读取每个int并将其作为参数传递给函数。它可以做到这一点,因为它已被专门编写为具有精确数量的参数的功能。然后,在包含函数名称和函数指针的表中,添加指向右convN()函数的指针,具体取决于目标函数所需的参数数量。

不要破解它。