1

所以基本上我需要的不是一个特定的代码(当然那会很棒),而只是一个关于如何实现我的目标的想法和方法。

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

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

这就是问题开始的地方

3)我必须获取生成的代码并以某种方式对其进行编译,以获取带有程序将打印出的文本的字符串。

4)然后将字符串与用户输入的内容进行比较。

所以步骤 3) 是我停下来的地方,没有帮助就无法弄清楚......我想在 .cpp 文件的函数中编写生成的代码,然后调用该函数,但我无法得到它工作,所以我开始想,我应该请教专家,也许还有其他一些方法或想法如何实现这一点。

4

6 回答 6

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

system将 2/3/4 包装到脚本中并使用or调用它可能是最简单的popen。该脚本可以确保文件名是唯一的,将 stderr 折叠到 stdout 等。

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


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

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

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

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

于 2012-04-16T12:22:15.003 回答
1

我认为您正在寻找一种编写 C++ 脚本的方法。看看http://www.softintegration.com/或这个 stackoverflow 问题任何将 Clang 作为脚本解释器嵌入 C++ 代码的教程?.

于 2012-04-16T12:11:51.963 回答
0

我没有使用过它,但它是免费的,也不会编译而是解释。非常适合你的问题,值得一试...

http://root.cern.ch/drupal/content/cint

于 2012-04-16T12:24:14.427 回答
0

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

于 2012-04-16T12:26:30.183 回答
0

Geordi这样的东西会起作用吗?

于 2012-04-16T12:42:07.777 回答
0

您可以像调用任何外部工具一样调用 c++ 编译器。例如system("g++ test.cpp"),或使用 popen 或您的平台提供的任何其他内容。

您还可以考虑将实现编译器的库集成到您的程序中。为此,您可能需要研究 clang 和 llvm。

于 2012-04-16T14:37:00.213 回答