我正在編寫一個解析器,它對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