代码之家  ›  专栏  ›  技术社区  ›  tim

GCC预处理:保留未定义的条件而不假定零值

  •  -1
  • tim  · 技术社区  · 8 年前

    我正在使用GCC预处理一些C文件。

    示例来源:

    #define A 1
    #define B 0
    
    #if A && B > 0
      bla()
    #else
      #if C == 0
        foo()
      #else
        foo2()
      #endif
      foo3()
    #endif
    

    我从一个留下注释的批处理文件中运行这个( -CC )并且不能通过宏工作( -fdirectives-only ):

    gcc -E -CC -fdirectives-only -Wundef infile.c > outfile.c
    

    它为上述示例提供了以下输出,因为它假定C=0是自动的:

    foo()
    foo3()
    

    我想要以下输出(GCC不做任何假设):

      #if C == 0
        foo()
      #else
        foo2()
      #endif
      foo3()
    

    有什么办法吗?我知道GCC就是这样 应该 工作,但也许通过做一些手工工作,这是可以做到的-你知道吗?

    我知道,替代品科恩将使这成为可能,但我不被允许使用它:-(

    提前谢谢!


    对不起,我想#define A&B、 编辑了我的来源

    1 回复  |  直到 8 年前
        1
  •  1
  •   rici    8 年前

    不,没有第三方应用程序是无法做到这一点的。GCC和clang都不包含此功能,这就是为什么存在第三方工具。