2016-06-21 41 views
-1

我正在使用GCC预处理一些C文件。GCC预处理:在未假定零值的情况下保留未定义的条件

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 NO假设):

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

有没有办法做到这一点?我知道这就是GCC应该如何工作,但也许通过做一些手工工作,它可以完成 - 你有什么想法吗?

我知道,替代科恩将使这一切成为可能! - 但我不能提前使用它:-(

感谢


对不起你们,我的意思是#定义一个& B.编辑我的消息来源

+0

在编译任何其他源之前先处理预处理行。 '#if A && B> 0'中的'A'和'B'与任何'A = 1'或'B = 0'源行无关。出于预处理器算术的目的,不是'#define'd的名称已被替换为'0'。 –

+0

您的输入和您的输出不匹配。我怀疑一些复制/粘贴错误。 – gnasher729

+0

什么是'A = 1'和'B = 0'?它无效C. – Lundin

回答

1

没有,有没有办法做到这一点没有一些第三方应用程序。无论是GCC也不铛包含此功能,这就是为什么第三方工具存在。