【发布时间】:2014-08-26 21:46:08
【问题描述】:
#define SWAP(a,b) { a^=b ; b^=a ; a^=b; }
if (x < 0)
SWAP(x,y);
else
SWAP(y,x);
我上面给出的代码不起作用。编译时出现以下错误。
trial.c:3:1: error: expected identifier or '(' before 'if'
trial.c:5:1: error: expected identifier or '(' before 'else'
我正在尝试找出它无法正常工作的确切原因。预处理器扩展宏如下
if (x < 0)
{
x^=y ;
y^=x ;
x^=y ;
};
else
{
y^=x ;
x^=y ;
y^=x ;
};
我怀疑花括号末尾的分号会导致问题。但我不确定。有人可以解释吗?
【问题讨论】:
-
你的
if和else语句的结尾}后面的;不应该在那里 -
我知道该怎么做 :) 我想解释一下为什么上述方法不起作用。
-
查看 if..else.. 的语法。
-
您希望
SWAP(x,y)和SWAP(y,x)做不同的事情吗? -
C multi-line macro: do/while(0) vs scope block 的可能重复项。 “现在,如果你的宏是按照第二种方法定义的(只是'{'和'}'),代码将不再编译,因为'if'的'true'分支现在由复合语句表示。并且当你放一个';'在这个复合语句之后,你完成了整个 'if' 语句,从而孤立了 'else' 分支(因此编译错误)。"