我在C中遇到了这一行代码:
#define RUNDE(n) ( K ^= Q[n], y = K, K = F(K) ^ xR, xR = y )
将某物多次分配给K有效吗?我认为在一条语句中多次更改变量是无效的。
发布于 2016-01-14 12:54:29
将某物多次分配给K有效吗?
这是完全有效的C宏。这里使用逗号运算符,
。
使用,
运算符,您可以多次为变量赋值。
例如,K = 20, K = 30;
,这将将30
分配给K
,覆盖20
的前一个值。
我认为在一条语句中多次更改变量是无效的。
是的,如果我们尝试在同一个C语句中修改一个变量不止一次,就会导致未定义的行为,但是在这里,,
首先是一个序列点。
因此,只有当第一次赋值( K
)的所有副作用(K = 20
)发生时,我们才会修改第二次(K = 30
)。
发布于 2016-01-14 12:50:16
这是很好的定义,因为逗号运算符在第二个操作数之前计算它的第一个操作数.
但是,IMHO --这段代码很可怕--您不应该编写它。存在inline
函数来做这样的事情;使用预处理器只是滥用。当然,您需要将一些参数传递给内联函数,但这比依赖周围作用域的名称要好得多。
发布于 2016-01-14 12:50:28
在C++中,这被认为是讨厌的;在C中,这是允许的,因为对预处理器的依赖更为必要。
但无论在哪种情况下,您的表达式都定义得非常好。逗号运算符(从左到右计算)充当顺序表达式分隔符。
这个宏的优点是它的值是xR = y
的值,它是y
的最终值。
但是,这个宏的不雅之处,比如使用不作为参数传递的变量名,可能比任何好处都要大。我倾向于把它扔了。
https://stackoverflow.com/questions/34790010
复制相似问题