【发布时间】:2014-05-28 11:22:47
【问题描述】:
我有这个 c 宏代码:
#define d(x, y, z) ( \
x += z, \
y += x, \
x += y \
)
我有几个问题:
- 这个宏函数有返回值吗? (例如,返回 x、y 或 z) 还是只是将参数变量与自身相加? (这是 没用的,我认为)。
-
\是什么意思? - 为什么原始编码器每次操作后都使用
comma-operator?为什么不直接使用;而不是,?
任何帮助将不胜感激
【问题讨论】:
-
顺便说一句,这段代码很糟糕,如果你想使用它会添加很多错误。
-
猜猜
int a=1,b=2,c=3,d=4;和int a=1;int b=d(1,a,3);的结果? -
“C 中可理解的宏”有点矛盾。
-
使用逗号运算符和包围
()使整个事情成为一个简单的语句,这意味着宏可以例如放在if之后(没有{})而不必担心这将导致if子句损坏。使用{}也可以,但我隐约记得在某些情况下()更好。 -
是的,正如@BryanChen 指出的那样,宏修改它的一个操作数通常不是一个好主意,尤其是修改几个操作数是不明智的。相比之下,可能会导致混淆,使逗号问题看起来像是小游戏。