我有一个处理输入文件的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编译器预处理功能吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
一种简单的可能性是使用popen
从命令管道读取,命令管道可以是cpp
(或gcc -C -E
)或m4
。
相关的可能性是在您的程序中嵌入脚本解释器,例如lua。一个相关的解决方案是使您的应用程序嵌入到解释器中,如Python或Ocaml。
最后,您可以使用普通的lexing和parsing技术,也许使用ANTLR并自行处理您的include指令。您还可以使用库来配置文件,例如libconfig
答案 2 :(得分:-1)
如果要在编译时打开/关闭功能,最好坚持使用标准预处理器宏或使用模板。您还可以查看Qt如何解析标准C ++代码以生成其他代码。在运行时,您可以使用脚本或插件系统来实现此目的。