我想知道是否有可能,如果是的話,我可以運行一個C預處理器,如cpp,在 C++源文件上,並只處理條件指令#if #endif等。我想要其他 指令在輸出文件中保持不變。如何將C預處理程序僅應用於某些(#if/#endif)指令?
我做的C#代碼的一些分析,也沒有C#預處理器。我的想法是在C#文件上運行一個預處理程序,並僅處理條件。例如,這種方式,#region指令將在文件中保留 ,但cpp似乎刪除#region。
我想知道是否有可能,如果是的話,我可以運行一個C預處理器,如cpp,在 C++源文件上,並只處理條件指令#if #endif等。我想要其他 指令在輸出文件中保持不變。如何將C預處理程序僅應用於某些(#if/#endif)指令?
我做的C#代碼的一些分析,也沒有C#預處理器。我的想法是在C#文件上運行一個預處理程序,並僅處理條件。例如,這種方式,#region指令將在文件中保留 ,但cpp似乎刪除#region。
你可能會尋找像coan的工具:
Coan是一款用於分析C或C++源代碼的基於預處理器的配置的軟件工程工具。它的主要用途是通過消除關於指定配置冗餘的任何部分來簡化源代碼體。
它的精確設計處理#if
和#ifdef
預處理線,並相應地刪除代碼,但它有很多其他可能的用途。
非常好!外觀與我正在尋找的完全一樣,但不幸的是,它看起來不適用於Mac OS。我現在試圖看看我是否可以編譯它。得到一些錯誤。你是否在Mac OS X上試過它,或者你知道Mac的其他選擇嗎? – Wickoo 2014-09-30 02:00:49
@Ali,不,我沒有Mac了。抱歉。但是從sourceforge頁面來看,它看起來像項目是活動的,所以你可能想要給開發者發郵件,指定你得到的編譯錯誤。如果您擁有所有先決條件,fwiw,編譯Mac OS X的包通常不會太困難。祝你好運。 – rici 2014-09-30 02:09:22
它看起來像是其中一個類中的迭代器類型不兼容。我應該看看它或聯繫開發人員。謝謝你的幫助! – Wickoo 2014-09-30 02:11:38
可以使用克++ -E選項預處理階段之後停止
-E - >停止後預處理stage.The輸出是在預處理後的源代碼的形式,其被髮送到標準輸出
「..但CPP似乎去掉#區域」,並G ++息事寧人? – user2864740 2014-09-30 01:41:27
@ user2864740,區域是特定於vC++編譯器的嗎?你使用vC++來編譯? – radar 2014-09-30 01:48:34
'#區域'是C#支持的指令,如果希望分析C#文件,剝離它可能會產生問題。 (我不是那個問這個問題的人。) – user2864740 2014-09-30 01:53:09
而linux unifdef命令你想要做什麼:
http://linux.die.net/man/1/unifdef
即使你不是在Linux中,有源在網絡上可用。
順便說一句,這是另一個問題重複:Way to omit undefined preprocessor branches by default with unifdef?
C#有'#if'和'#endif'等?途徑省略默認未定義預處理器分支與unifdef](的 – chris 2014-09-30 01:55:26
可能重複的HTTP ://stackoverflow.com/questions/14491555/way-to-omit-undefined-preprocessor-branches-by-default-with-unifdef) – 2015-07-01 21:19:30