从文件中读取一行c代码并在c程序中执行

时间:2014-05-08 12:16:28

标签: c

我有一个c程序,它计算某些x值(main.c)的f(x)。我需要从文件中获取一行c代码,该代码是我执行的函数(function.dot)。例如,function.dot将包含: POW((1-X),0.333); 我需要读取此文件,获取该函数并在我的代码(main.c)中执行。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

基本步骤是:

  1. 从文件中读取该行。
  2. 生成一个新的源文件,该文件将代码行包装在适当的代码中。
  3. 调用编译器将该代码编译为共享对象/ dll。
  4. 加载库。
  5. 调用库中的函数。
  6. 如果文件中的单行代码可以是任何语言,那么使用像Lua这样可以链接到主可执行文件的东西要容易得多。

答案 1 :(得分:0)

您可以考虑以下几个选项: 1)切换到任何数量的解释语言(python,perl等),支持这个作为一种简单的机制。 (例如:在python中

data = open("function.dot").read()
x = 5
eval(data) #note that this is unsafe if you can't trust data, and you might also need to play with environment

2)你可以将代码包装在它自己的c文件中...类似的东西(但有更多的错误检查等......你可能不想这样做)

void generate_c_program(char *line)
{
  FILE *fp = fopen("myfile.c","wt");
  fprintf(fp,"#include <math.h>\nint main(char *argv, int argc) {\n double x = atof(argv[1]); printf(\"%f\",(%s));}\n");",line); //this is also unsafe if you can't trust data
  fclose(fp);
  //now execute gcc myfile.c
  //now execute a.out
  //optionally cleanup by deleting a.out and myfile.c

}

3)有效地编写自己的编译器/解析器(如果您之前已经完成此操作可能相当容易,并且您需要支持的功能/操作数量很少,或者可能是一个更大的交易而且不适合在这个答案中)......可扩展的方式是使用LEX / YACC或类似的方法)

答案 2 :(得分:0)

我会提供一些选择:

  1. 切换到另一种解释器语言,包括python,ruby,perl,... 如果您正在处理小项目,我推荐这个选项。

  2. 在C中实现自己的解释器。 解析您的输入,分析并执行它。 您可能会发现开源实现。 一种选择是俚语 http://www.jedsoft.org/slang/doc/html/slang.html

  3. 调用C编译器并动态链接它。 这取决于您的操作系统,但“system”或“exec”函数可帮助您调用编译器来处理输入文件。如果您使用的是Linux,'dlsym'可以打开从您的输入文件编译的共享对象。 您可能需要将输入文件转换为C程序。 编译速度很慢但运行速度最快。