我想知道是否有可能,如果是的话,我可以运行一个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