我有一个用例,其中有条件地选择功能内容。并且该函数指针被传递给其他模块以供以后调用。
void encode_function(int flag)
{
if (flag == 1)
encode1();
if (flag == 2)
encode2();
encode_defaults();
}
填充encode_function()后,我会将其传递给其他模块,然后调用它。 我试图用C语言实现它,但到目前为止还没有成功。我试着查看dyncall库,但它只支持动态参数更改。
我正在寻找允许我在运行时更改功能内容的内容。
一些现有问题Is there a way to modify the code of a function in a Linux C program at runtime?
答案 0 :(得分:3)
您基本上正在寻找将代码视为数据的能力,这是c等编译命令式静态语言中很少提供的功能。在运行时修改函数的功能通常被归类为高阶函数(您基本上试图将函数作为代码中的某处返回函数)。
如果问题可以通过几个静态函数解决,你可以将函数指针传递给不同的实现,否则我认为c不能真正将代码视为数据并动态修改它们。
This question尝试在c中实现高阶函数,但是走这么远可能不是你想要的。