C - 在一行中对同一变量进行多次赋值

时间:2016-01-14 12:46:49

标签: c++ c coding-style

我在C:

中遇到了这段代码
<script src="/Scripts/jquery/jquery-2.1.4.js"></script>

<script src="/Scripts/cldr.js"></script>
<script src="/Scripts/cldr/event.js"></script>
<script src="/Scripts/cldr/supplemental.js"></script>
<script src="/Scripts/cldr/unresolved.js"></script>
<script src="/Scripts/globalize.js"></script>
<script src="/Scripts/globalize/number.js"></script>
<script src="/Scripts/globalize/date.js"></script>

<script src="/Scripts/moment.min.js"></script>
<script src="/Scripts/moment-with-locales.min.js"></script>

<script src="/Scripts/bootstrap/bootstrap.js"></script>
<script src="/Scripts/respond/respond.js"></script>

<script src="/Scripts/jquery/jquery.validate.min.js"></script>
<script src="/Scripts/jquery/jquery.validate.globalize.min.js"></script>
<script src="/Scripts/jquery/jquery.validate.unobtrusive.min.js"></script>

<script src="/Scripts/bootstrap-datetimepicker.js"></script>

多次向K分配内容是否有效?我认为在一个语句中多次更改变量是无效的。

4 个答案:

答案 0 :(得分:4)

  

多次向K分配内容是否有效?

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

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

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

  

我认为在一个陈述中多次更改变量是无效的。

是的,如果我们尝试在同一个C语句中多次修改变量但是首先20sequence point,则会导致未定义的行为。

因此,只有在第一次分配(,)的所有副作用发生时,我们才会保证我们将第二次修改KK = 30}。

答案 1 :(得分:2)

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

然而,恕我直言,这段代码很糟糕,你不应该写它。存在inline函数来做这样的事情;使用预处理器只是滥用。当然,您需要将一些参数传递给内联函数,但这比依赖周围范围的名称更可取。

答案 2 :(得分:1)

在C ++中,这将被视为令人讨厌;在C中它是允许的,因为更依赖于预处理器。

但在任何一种情况下,你的表达都是完全明确的。逗号运算符(从左到右进行计算)充当有序表达式分隔符。

这个宏的优雅之处在于它的值是xR = y的值,它是y的最终值。

但是这个宏的不雅,比如使用不作为参数传递的变量名,可能会超过任何好处。我倾向于把它包起来。

答案 3 :(得分:1)

它是一个有效的逗号运算符,它按顺序执行所有语句,返回最后一个语句的值。

该宏是一系列分配,使用最后一个分配(yxR)作为返回值