首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C-同一变量在一行中的多个赋值

C-同一变量在一行中的多个赋值
EN

Stack Overflow用户
提问于 2016-01-14 12:46:48
回答 4查看 1.9K关注 0票数 3

我在C中遇到了这一行代码:

代码语言:javascript
运行
复制
#define RUNDE(n) ( K ^= Q[n], y = K, K = F(K) ^ xR, xR = y )

将某物多次分配给K有效吗?我认为在一条语句中多次更改变量是无效的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-01-14 12:54:29

将某物多次分配给K有效吗?

这是完全有效的C宏。这里使用逗号运算符,

使用,运算符,您可以多次为变量赋值。

例如,K = 20, K = 30;,这将将30分配给K,覆盖20的前一个值。

我认为在一条语句中多次更改变量是无效的。

是的,如果我们尝试在同一个C语句中修改一个变量不止一次,就会导致未定义的行为,但是在这里,,首先是一个序列点

因此,只有当第一次赋值( K )的所有副作用(K = 20)发生时,我们才会修改第二次(K = 30)。

票数 4
EN

Stack Overflow用户

发布于 2016-01-14 12:50:16

这是很好的定义,因为逗号运算符在第二个操作数之前计算它的第一个操作数.

但是,IMHO --这段代码很可怕--您不应该编写它。存在inline函数来做这样的事情;使用预处理器只是滥用。当然,您需要将一些参数传递给内联函数,但这比依赖周围作用域的名称要好得多。

票数 2
EN

Stack Overflow用户

发布于 2016-01-14 12:50:28

在C++中,这被认为是讨厌的;在C中,这是允许的,因为对预处理器的依赖更为必要。

但无论在哪种情况下,您的表达式都定义得非常好。逗号运算符(从左到右计算)充当顺序表达式分隔符。

这个宏的优点是它的值是xR = y的值,它是y的最终值。

但是,这个宏的不雅之处,比如使用不作为参数传递的变量名,可能比任何好处都要大。我倾向于把它扔了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34790010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档