如何仅将C预处理器应用于某些(#if /#endif)指令?

时间:2014-09-30 01:23:28

标签: c++ c-preprocessor

我想知道是否可能,如果是的话,我可以运行 C 预处理器,如cpp, C ++源文件只处理条件指令#if #endif等我想要其他 指令在输出文件中保持不变。

我正在对C#代码进行一些分析,而且没有C#预处理器。我的想法是在C#文件上运行 C 预处理器并仅处理条件。这种方式,例如#region指令将保留 在文件中,但cpp似乎删除了#region。

4 个答案:

答案 0 :(得分:1)

您可能正在寻找像coan这样的工具:

  

Coan是一个软件工程工具,用于分析基于预处理器的C或C ++源代码配置。它的主要用途是通过消除任何与指定配置相关的冗余部分来简化源代码体。

它精确地设计用于处理#if#ifdef预处理器行,并相应地删除代码,但它有很多其他可能的用途。

答案 1 :(得分:0)

您可以使用g ++ -E 选项在预处理阶段

后停止
  

-E - >在预处理阶段后停止。输出采用预处理源代码的形式,发送到标准输出

答案 2 :(得分:0)

linux unifdef命令可以执行您想要的操作:

http://linux.die.net/man/1/unifdef

即使您不在Linux上,也可以在网上找到源代码。

顺便说一下,这是另一个问题的重复:Way to omit undefined preprocessor branches by default with unifdef?

答案 3 :(得分:0)

哦,这和我过去一样。我尝试了cpp unifdef coan 工具-它们都偶然发现了特殊的C#预处理程序,例如 #region 。最后,我决定制作自己的一个: https://github.com/gaDZella/undefine

与提到的cpp工具相比,该工具具有一组非常简单的选项,但它与C#预处理程序语法完全兼容。