C - 如何获取用户定义的函数并将其转换为指针?

时间:2011-11-02 05:32:19

标签: c function pointers

我想知道是否有任何方法可以从数学形式的stdin获取用户定义的函数(带有两个变量)并将其转换为函数指针。换句话说,我想要做的就是运行:

> ./program a*b

程序将其转换为返回函数的指针:

 return a*b;

因此,program的输出是

  

user_defined_function(INT)(int)的

这将是一个更大的计划的一部分。

如果我知道如何解决这个问题,我会发布一些代码,但我不会......我只需要帮助将用户定义的函数转换为函数指针的步骤,因为我知道如何将用户定义的函数转换为C函数。

4 个答案:

答案 0 :(得分:2)

没有简单的解决方案,因为你必须生成代码。

我想到的简单解决方案:

  • 从您的程序中生成一个只有一个函数的C文件,将命令行参数作为return语句插入
  • 为函数指定已知或生成的名称
  • 执行编译器并生成共享库
  • 动态加载该共享库
  • 调用已知函数

我担心它不会比那更简单。

另一种解决方案是编写/使用表达式解析器并解析数学表达式,然后在运行时进行求值...

答案 1 :(得分:2)

只是为了好玩,这里有CINT

的链接
  

CINT是 C和C ++代码的解释器 ......

     

... CINT脚本可以调用编译的类/函数,编译后的代码可以回调CINT解释函数 ......

我并不是说这是一个“好”的解决方案(事实上它可能非常“坏”),但是有些人已经付出了很多努力 - “略少于400,000行代码“ - 进入这个项目; - )

快乐的编码。

答案 2 :(得分:1)

这在C中很难做到,因为它是一种编译语言。你可以做 Mario The Spoon 建议,或者你可以切换到像ruby或javascript这样的动态语言。这些语言有一个“eval”方法,它接受字符串并在字符串中执行代码,并且它们能够动态定义函数。

答案 3 :(得分:0)

您提出的建议完全有可能,您只需编写将用户文本转换为机器代码的代码。这称为编译器gcc与您的程序非常相似,如果它运行了它生成的代码。