基本上我需要的不是特定代码(当然会很棒),而只是关于如何实现目标的想法和方法。
1)我必须用C ++创建一个程序,它生成一个C ++代码的小例子,每次都有点不同。 (这对我没有任何问题,我将使用模板并在代码中随机化一些变量,这将使它每次都是唯一的。)
2)我将显示生成的代码,用户必须输入,他认为代码打印出来。
以下是问题的起点:
3)我必须采取生成的代码并以某种方式编译它以获得一个字符串,其中包含程序打印出来的文本。
4)然后将字符串与用户输入的内容进行比较。
所以步骤3)是我停下来的地方,如果没有帮助就无法弄明白...我想在.cpp文件的函数中编写生成的代码,然后调用该函数,但我无法'让它发挥作用,所以我开始思考,我应该问专家,也许还有其他一些方法或想法如何实现这一点。
答案 0 :(得分:2)
将2/3/4包装到脚本中可能最简单,并使用system
或popen
调用它。该脚本可以确保文件名是唯一的,将stderr折叠到stdout等等。
您正在运行的程序并不是真正与已编译的代码交互,只是读取输出,因此将其保持为单独的过程可能是最简单的。该脚本可以添加一些标记,以帮助您区分编译器输出/错误与程序输出。
我多年没有编写批处理文件,但是一旦你知道如何从命令行运行编译器(ref),你就可以编写一个脚本:
.cpp
文件.exe
然后,在C ++中,您只需将代码保存到脚本所需的.cpp
文件中,执行类似system("myScript.bat")
的脚本,然后读取输出文件。
如果您不想编写单独的批处理脚本,可以只调用system
一次来调用编译器,然后再次执行生成的.exe
。
答案 1 :(得分:1)
我认为你正在寻找一种编写c ++脚本的方法。请查看http://www.softintegration.com/或此stackoverflow问题Any tutorial for embedding Clang as script interpreter into C++ Code?。
答案 2 :(得分:0)
我没有用过这个,但它是免费的,也不是编译而是解释。非常适合你的问题,值得一试......
答案 3 :(得分:0)
为什么不使用system()调用独立编译生成的代码? system(“g ++ temp.cpp -o temp.exe); - 这种类型的东西,然后基于返回值 你可以像system(“temp.exe”)一样再次运行temp.exe;当然,您可以将temp.exe的输出打印到文件中并读取该文件以获取temp.exe到当前程序的输出。
答案 4 :(得分:0)
像Geordi这样的东西会起作用吗?
答案 5 :(得分:0)
您可以像调用任何外部工具一样调用c ++编译器。例如。 system("g++ test.cpp")
或使用popen或您的平台提供的任何其他内容。
您还可以考虑将实现编译器的库集成到您的程序中。为此你可能想看看clang和llvm。