我正在编写一个解析器,它对C/C++源文件进行操作。作为解析器的第一阶段,我需要使用一些已经可用的预处理器,这样我就可以脱离诸如#define, #ifdef
之类的指令。 对于g ++,可用的工具是'cpp'
(或g++ -E ...
)。我有2个问题:如何使用包含路径的cpp(c预处理器)
我分析器用C++编写,所以这可能是运行在其他C/C++源文件,这个“CPP”的最佳方式?是这样的:
system("cpp sourceFile.cpp parsed_sourceFile.cpp"); // just a pseudo code
还有没有更好的方法?
(我想知道,只有用它,我可以在指定的文件进行预处理的可能途径。有喜欢
system()
这些命令,或popen()
是做这样的事标准的方式?)我怎么能走照顾源文件内的非标准包含文件?我不知道这些用户定义的头文件存储在哪个地方。
你是在Windows还是* nix? Win32 API有一些调用(如ShellExecute())。我相信*尼克斯有他们自己的,但我不知道他们是什么。 – jonsca 2011-03-19 12:36:31
不,我正在使用unix类型的平台。为什么我与system()混淆是因为,我在某处读到系统(“PAUSE”)是一个糟糕且不可移植的命令。但是现在我认为,它是特定于“暂停”而不是一般意义上的system()。 – iammilind 2011-03-20 16:15:46
它不可移植,因为我不相信所有系统都有“暂停”的通用性。在某些情况下,这也是一种安全风险,因为如果某人用一个同名的流氓程序替换了系统的“暂停”,那么您用系统编写的每段代码(“暂停”)都会变得危险。 – jonsca 2011-03-20 21:17:00