2012-04-16 135 views
1

所以基本上我所需要的不是一个特定的代码(当然这很好),而只是一个关于如何实现我的目标的想法和方法。如何在程序运行时生成并编译C++代码?

1)我必须用C++创建一个程序,它生成一个C++代码的小例子,每次都有点不同。 (这对我没有任何问题,我将使用模板并随机化代码中的一些变量,这将使其每次都具有唯一性。)

2)我将显示生成的代码,用户必须输入,他认为代码打印出来。

这里是哪里出现问题开始

3)我得把生成的代码和编译它在某种程度上得到与该程序会打印出的文本字符串。

4),然后比较一下用户已经输入的字符串。

所以步骤3)是我停下来,不能弄明白没有帮助......我想写生成的代码在一个.cpp文件的功能,然后调用该功能,但我无法让它工作,所以我开始思考,我应该问一个专家,也许还有一些其他的方法或想法如何实现这一点。

回答

2
  1. 写.cpp文件
  2. 调用编译器(或作出或等效的编译系统)
  3. 如果编译失败,可能显示错误?
  4. 如果编译成功,运行生成的程序并显示输出

这可能是最简单的包装2/3/4到脚本,并调用与systempopen。该脚本可以确保文件名是唯一的,将stderr折叠到标准输出等。等等。

您正在运行的程序并不真正与编译代码进行交互,只是读取输出,因此将其保存为单独的进程可能最容易的。该脚本可以添加一些标记来帮助区分程序输出中的编译器输出/错误。


我没有写了多年的批处理文件,但一旦你知道如何在命令行(ref)运行你的编译器,你可以写一个脚本:

  1. 编译.cpp文件
  2. 执行结果.exe
  3. 其输出重定向到文件

然后,在C++中,您只需将代码保存到脚本所需的.cpp文件中,然后执行脚本,如system("myScript.bat"),然后读取输出文件。

如果您不想编写单独的批处理脚本,则可以调用system一次来调用编译器,然后再次执行结果.exe

+0

这听起来很有希望,但stil,我不知道如何调用编译器。实际上这就是我所需要的,我需要编译一个nother .cpp文件,同时执行主文件...你能更具体吗? – krishkule 2012-04-16 13:26:46

+0

你如何调用你的编译器是平台特定的(和编译器特定的)。你能告诉我你现在使用的是什么平台,编译器和编译系统吗? – Useless 2012-04-16 13:30:57

+0

我正在使用MS visual studio 2010 Express,我真的不能告诉你更多(我不知道)。我没有改变任何事情都是默认的,希望这是足够的 – krishkule 2012-04-16 15:02:46

0

你为什么不编译使用系统生成的代码独立的()调用? (“g ++ temp.cpp -o temp.exe); - 这种东西,然后根据返回值 您可以再次运行temp.exe,就像系统(”temp.exe“);您可以打印的当然输出从temp.exe到一个文件,读取文件,以获得的temp.exe输出到当前的程序..

0

您可以调用C++编译器,就像你'd调用任何外部工具,例如system("g++ test.cpp")或使用popen或其他平台提供的其他工具

您也可以考虑将实现编译器的库集成到yo中你的程序。为此,你可能想看看clang和llvm。

相关问题