C 在if中更改变量时遇到的问题
我在理解if预处理器指令如何工作时遇到了一些问题 根据该代码:C 在if中更改变量时遇到的问题,c,if-statement,c-preprocessor,C,If Statement,C Preprocessor,我在理解if预处理器指令如何工作时遇到了一些问题 根据该代码: int a, b; #define VAR (a | b) void foo(int x) { if(x) a = smth; b = smth2; else a = xmth; b = xmth2; } int main() { foo(x); #if(VAR != 0) { f = VAR;
int a, b;
#define VAR (a | b)
void foo(int x)
{
if(x)
a = smth;
b = smth2;
else
a = xmth;
b = xmth2;
}
int main()
{
foo(x);
#if(VAR != 0)
{
f = VAR;
}
}
我只能更改foo,但无论xmth/smth的值是多少,我都得到f=0。为什么?预处理器指令在编译程序之前会被解释。所以VAR不知道a和b。看
相反,您可以创建一个接受参数的宏,如下所示:
#define VAR(a,b) (a | b)
…并像这样使用它:
#if (VAR(a,b) != 0)
您必须调整您的程序,因为a和b不属于您的主要功能范围。我见过一些重复,但现在找不到。如果是预处理器指令,则在编译之前执行,并且不再存在于最终程序中。你得到f==0,因为VAR什么都不是,预处理器甚至不知道a或b。呃,你是在跟foo中那些没有支撑的if/else行开玩笑吧?它只是一个样本,我可以这样做:定义VARa,ba | b,然后定义BIGVAR,如果BIGVAR=0?@user3623498不,你不能。不要试图找到像这样的黑客,这是行不通的。您需要在某个时刻将参数传递给宏。但是如果。。。。仍然是一个预处理器指令,如果