2011-11-02 31 views
1

我想了解更多有关编写C代码生成器的工具的知识。实质上,我们如何实现类似于C++模板的功能。用于生成C代码的工具/ IDE /语言存在

+3

我认为你必须更具体地说明你想达到的目标。 –

+0

我同意。关于这个话题的信息太少了,我不太确定我在问什么。我会再试一次。我有一个适用于C中给定数据类型的代码,可以说是整数。我想将其推广到其他数据类型。我不认为简单地做typedef和搜索替换是可行的。是否有工具和更加明确的代码生成方法。在其他我想要的模板功能,但不介意做两步编译。我的目标语言是C. – Sandeep

+0

好吧,显而易见的答案是使用C语言中称为“C++”的扩展。 –

回答

1

尽管这不是一个完美的解决方案,并且需要一些时间来掌握它,但我过去曾使用过m4 macro processor来生成通用C代码(有点像C++模板)。你可能想检查一下。

+0

我很确定m4宏不是“像C++模板”。尝试使用两者来编写'type_traits'或'Boost :: Spirit',或者就此而言,执行*任何*不重要的模板元编程。 – delnan

+0

那么,既然GNU m4是图灵完备的,理论上你可以做一些等同于'type_traits'或'Boost:Spirit'的东西。我认为这不会实际可行。不过,在我看来,m4对于简单的通用容器等简单的东西来说效果很好。 – cyco130

+0

当然,它可能适用于复制某些容器或算法的源代码,并将其替换为“instanciate”(某些预处理器hackery应该同样适用)。但这只是C++模板的一小部分。请不要将它们降低到那个水平(并且请不要去愚蠢的turing tarpit路线 - 由于无限的时间和不屈的代码猴,人们只关心你是否能够在合理的时间内以合理的资源进行操作)。 – delnan

0

您正在寻找一种方法来为非常相似的类生成代码,其中不同的地方实际上是它们的类型。

您可以使用基于模板的代码生成器,其中“模板”表示带有字符串替换的“样板代码”。这是最简单的情况。像StringTemplate或CodeSmith这样的工具将完成这项工作。但还有很多其他的。只需四处搜寻。

如果您想要一个更严重的生成场景,根据一组定义可能需要不同的类结构,那么您应该使用完全可编程的生成器,如AtomWeaver。还有其他(MPS,Xtext),但这些不依赖于模板。

+0

谢谢瑞。我会试一试。不知道它将如何生成C代码? – Sandeep

+0

AtomWeaver是一个IDE,与MS Visual Studio非常相似,但代码生成。要生成代码,请创建一个Atom模板,然后在模板的Exec部分中,使用code()命令将您的代码括起来。在您的模板上创建参数,并用这些参数替换代码的可变部分。无论如何,你应该运行一些简单的例子的教程... –