在 #if 中更改变量时出现问题

Problems changing variable in #if

我在理解 #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;
    }
}

我只能更改 foo(),但无论 xmth/smth 的值是什么,我都会得到 f=0。为什么?

预处理器指令在编译程序之前被解释。 所以 VAR 不知道 ab。参见 C preprocessor on Wikipedia


相反,您可以创建一个带有参数的宏,如下所示:

#define VAR(a,b) (a | b)

...并像这样使用它:

#if (VAR(a,b) != 0)

您必须调整您的程序,因为 ab 不属于您的 main() 函数的范围。