我正在编写一个对C / C ++源文件进行操作的解析器。作为解析器的第一阶段,我需要使用一些已经可用的预处理器,这样我就可以使用诸如#define, #ifdef
之类的指令。
对于g ++,可用工具是'cpp'
(或g++ -E ...
)。我有两个问题:
我的解析器是用C ++编写的,那么在其他C / C ++源文件上运行这个'cpp'的最佳方法是什么呢?它是这样的:
system("cpp sourceFile.cpp parsed_sourceFile.cpp"); // just a pseudo code
还是有更好的方法吗?
(我只想知道对给定文件执行预处理的可能方式。system()
或popen()
这些命令是标准的做法吗?)
如何处理源文件中包含的非标准文件?我不知道存储这些用户定义的头文件的位置。
答案 0 :(得分:0)
系统是最跨平台的方式。但是如果您的代码是单平台的,那么您可以通过使用平台的本机API更好地控制子程序的执行。就像Windows中的ShellExecute一样。
有多种地方可以找到非标准的包含文件,例如与源脚本在同一目录中。这些目录通常在项目的项目和MAK文件中提到。您可以打开这些文件并查找其中提到的额外包含位置。但更简单的方法当然是向用户询问那些包含文件的位置。