在 #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
不知道 a
和 b
。参见 C preprocessor on Wikipedia。
相反,您可以创建一个带有参数的宏,如下所示:
#define VAR(a,b) (a | b)
...并像这样使用它:
#if (VAR(a,b) != 0)
您必须调整您的程序,因为 a
和 b
不属于您的 main()
函数的范围。
我在理解 #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
不知道 a
和 b
。参见 C preprocessor on Wikipedia。
相反,您可以创建一个带有参数的宏,如下所示:
#define VAR(a,b) (a | b)
...并像这样使用它:
#if (VAR(a,b) != 0)
您必须调整您的程序,因为 a
和 b
不属于您的 main()
函数的范围。