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

时间:2016-06-21 07:52:42

标签: c parsing gcc c-preprocessor preprocessor-directive

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

Examplesource:

#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 应该如何工作,但也许通过做一些手工工作,可以做到 - 你有什么想法吗?

我知道,替代Coan会使这成为可能 - 但我不允许使用它: - (

提前致谢!

抱歉,我认为#define A& B.编辑我的来源

1 个答案:

答案 0 :(得分:1)

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