添加C / C ++就像预处理能力一样

时间:2011-12-01 06:37:42

标签: c++ parsing c-preprocessor preprocessor-directive

我有一个处理输入文件的C ++程序。我想为我的程序添加预处理功能。也就是说输入文件如下:

%pre-processing section
#include <some_parent_file>
#define x y
#ifdef 0
some useless text
#endif

%actual file-contents
... lots of text ...

然后我的程序应该自动包含父文件中的文本,执行#define内容和其他预处理。我可以在调用我的程序之前使用脚本(使用g ++ -E),但我希望能够在我的程序中执行此操作,因为这样可以提供更大的灵活性。

当“实际文件内容”部分中的行以哈希开头时,“g ++ -E”将采用预处理器指令(g ++ -E不知道我想将我的代码分成2个部分! )。

此外,如果我可以在“实际文件内容”部分中使用只是 ifdef功能,那就太棒了。

我可以在程序中嵌入C ++代码,只使用我想要的gcc编译器预处理功能吗?

3 个答案:

答案 0 :(得分:2)

Wavecpplib这样的库怎么样?

答案 1 :(得分:1)

一种简单的可能性是使用popen从命令管道读取,命令管道可以是cpp(或gcc -C -E)或m4

相关的可能性是在您的程序中嵌入脚本解释器,例如lua。一个相关的解决方案是使您的应用程序嵌入到解释器中,如PythonOcaml

最后,您可以使用普通的lexingparsing技术,也许使用ANTLR并自行处理您的include指令。您还可以使用库来配置文件,例如libconfig

答案 2 :(得分:-1)

如果要在编译时打开/关闭功能,最好坚持使用标准预处理器宏或使用模板。您还可以查看Qt如何解析标准C ++代码以生成其他代码。在运行时,您可以使用脚本或插件系统来实现此目的。