我的问题:
程序从文件{INFINITE,CMDSTART,2,CMDPLAY,4,CMDPAUSE,CMDSTOP}输入
可以使用上述输入命令的任意组合。
程序的输出是读取上述输入并按输入定义的顺序执行功能。
上面的输入应该导致执行类似的代码:
while(true)
{
cmdStart();
for(i=0;i<2;++i)
cmdPlay();
for(i=0;i<4;++i)
cmdPause();
cmdStop();
}
如果我没有“INFINITE”,那么我可能会有一个strcmp()
和一个switch语句来获取执行顺序。但是无限的,我意识到,我必须在输入顺序中将这些函数指针存储在数组中。在那之后,在一段时间内(循环),我必须调用这些函数指针。关于如何做到这一点的任何有趣的想法。
答案 0 :(得分:3)
您需要将文件中的信息解析为描述迭代计数和要调用的函数的结构数组。然后,您可以使用一些代码来解释结构并采取相应的行动。
实际上在运行时生成C代码是可能的,但是足够强硬以至于我不会打扰。您可能将C代码写入源文件,将其编译为动态加载的库,然后在执行之前加载库。一个关于'大锤'和'坚果'的短语让人想起。
答案 1 :(得分:1)
是的,但你需要一个编译器(或两个)来完成它。基本上,您需要将“迷你语言”翻译成C,然后调用C编译器来编译结果,然后执行该操作。您(显然)期望在父程序的上下文中执行,因此为了执行它,您通常希望将其作为共享库或DLL或您的平台沿该行提供的任何内容加载。
IMO,这是一个相当迂回的方式来实现你所追求的目标。将某种脚本解释器(例如lua)嵌入到可执行文件中,并用该语言编写脚本更为常见。