2012-03-30 80 views
5

我想通过gcc的-Dmacro = value选项将C宏的值传递给预处理器。但是,它并没有达到我的预期。这是我的代码的基础:为什么不是gcc从命令行传递宏值?

#define T0 0 
#define T1 0 
#define T2 0 
#define T3 0 

int main(){ 

    int f[9]; 

    start(f[T0], f[T1], f[T2], f[T3]); 

    return 0; 
} 

运行gcc -DT3=1 -E显示预处理器不会取代T3的初始值。我错过了什么,价值如何正确传递?

+0

我刚刚遇到了这个问题,并且有点惊讶b/c我一直认为命令行定义应该覆盖内联定义。我依稀记得微软的编译器是这样做的,但不幸的是,我有一段时间没有访问权限。我有MSVC的任何人都可以测试并发布信息,那将很好。 – ysap 2012-09-08 00:30:39

回答

7

Afaik开关将定义一个宏,但是你的代码会覆盖它回到0.从你的代码中删除定义或者用ifdef包围它,它应该没问题。

+3

ifdef围着它做了诡计,谢谢。 – quetric 2012-03-30 21:28:22