代码之家  ›  专栏  ›  技术社区  ›  user3623498

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

  •  -5
  • user3623498  · 技术社区  · 6 年前

    我在理解 #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 为什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ronan Boiteau    6 年前

    预处理器指令在编译程序之前进行解释。 所以 VAR 不了解 a b 看见 C preprocessor on Wikipedia


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

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

    。。。然后像这样使用它:

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

    你必须调整你的计划,因为 A. B 不属于您的 main() 作用