2014-01-11 51 views
-2

我正在创建一个应用程序,它将根据最终用户输入到程序中的内容创建一个可用的可执行文件。从另一个程序创建一个程序?

例如:

if (make_annoying_sounds == true) 
{ 
    //Generates an executable that makes annoying beeping sounds 
} 
else 
{ 
    //Generates an executable that doesn't make annoying beeping sounds 
} 

基本上,我想我的程序生成/创建另一个程序。我见过/使用过许多这样的程序。我在互联网上搜索过,找不到任何东西。所有的帮助表示赞赏。 (从我的程序中创建一个程序)。

回答

0

你需要做到以下几点:

  1. 基于用户输入,生成自定义程序的代码。
  2. 将该代码编译为可执行文件。
+0

谢谢,这正是我想要做的。但是,如何从我的应用程序中编译该程序(生成的程序)? – Sedulous

+0

创建一个运行编译器的新进程,将生成的程序作为其输入 –

1

尝试在创建源文件后使用基本的system调用来调用编译器。

你可以只是stdio.h

安全注意事项的实用程序创建的源文件:system已知函数是危险的。如有疑问,请调用类似exec的函数来调用编译器。尽管exec会清除当前正在运行的进程,因此如果要在编译完成后继续执行某些操作,则应该使用fork,然后再拨打exec

+0

谢谢,这应该可以正常工作。有没有其他的方法来做到这一点?尽管如此,这应该无论如何。编辑:没关系,谢谢! – Sedulous

+0

@Sedulous除非你想自己实现编译例程,这是很多工作,或者你想调用编译器的私有API,这是非常不可靠的,因为API可以在没有通知的情况下改变,最好是创建一个单独的过程。 – randomusername

0

Theorically,你可以,这取决于用户的输入,让你的C代码生成您if语句中的C代码。然而,这将是相当困难的。

我认为最好的方法是制作一个独立的C引擎,它只执行所有生成的程序可以执行的函数(例如播放参数中给出的声音)。你试图编码的程序(不是引擎,而是带有if语句的程序,我们称之为“主程序”)必须生成实现算法的代码,该算法将选择引擎的哪个函数以及何时调用。这个生成的代码应该用lua这样的脚本语言编写,因为in比生成脚本代码更容易。因此,应该将引擎设计为能够与Lua脚本进行通信。当用户点击主程序的最终“生成程序”按钮时,主程序调用gcc编译引擎和Lua脚本以生成用户试图创建的程序。这很长,但我认为这是正确的做法。