我在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分配内容是否有效?我认为在一个语句中多次更改变量是无效的。
答案 0 :(得分:4)
多次向K分配内容是否有效?
这是完全有效的C宏。这里使用逗号运算符= 0
。
使用,
运算符,您可以多次为变量赋值。
例如,
这会将K = 20, K = 30;
分配给30
,覆盖K
的先前值。
我认为在一个陈述中多次更改变量是无效的。
是的,如果我们尝试在同一个C语句中多次修改变量但是首先20
是sequence point,则会导致未定义的行为。
因此,只有在第一次分配(,
)的所有副作用发生时,我们才会保证我们将第二次修改K
次K = 30
}。
答案 1 :(得分:2)
这是明确定义的,因为逗号运算符在第二个操作数之前计算它的第一个操作数。
然而,恕我直言,这段代码很糟糕,你不应该写它。存在inline
函数来做这样的事情;使用预处理器只是滥用。当然,您需要将一些参数传递给内联函数,但这比依赖周围范围的名称更可取。
答案 2 :(得分:1)
在C ++中,这将被视为令人讨厌;在C中它是允许的,因为更依赖于预处理器。
但在任何一种情况下,你的表达都是完全明确的。逗号运算符(从左到右进行计算)充当有序表达式分隔符。
这个宏的优雅之处在于它的值是xR = y
的值,它是y
的最终值。
但是这个宏的不雅,比如使用不作为参数传递的变量名,可能会超过任何好处。我倾向于把它包起来。
答案 3 :(得分:1)
它是一个有效的逗号运算符,它按顺序执行所有语句,返回最后一个语句的值。
该宏是一系列分配,使用最后一个分配(y
或xR
)作为返回值