很抱歉,如果这是一个愚蠢的问题,但我遇到了用C语言编写的这行代码,这让我很困惑来自JavaScript背景。
short s;
if ((s = data[q])) return s;
这是为数据[q]分配s,如果它等于true / 1则返回s?
答案 0 :(得分:5)
是的,作业......很好......但它也是一种表达方式。任何不等于零的值都将被评估为真,零将被评估为假。
它与
相同if ((s = data[q]) != 0) return s;
答案 1 :(得分:3)
您的代码正在将data[q]
分配给s
,然后将s
返回到if
语句。在s
不等于0
的情况下,您的代码会返回s
,否则会转到下一条指令。
或者更好地说它会扩展到以下内容:
short s;
s = data[q];
if (s != 0)
return s;
答案 2 :(得分:2)
基本上C评估表达式。在
s = data[q]
data[q]
的值是此处表达式的值,并根据该值评估条件。
作业
s <- data[q]
只是side-effect
。
关于序列点和副作用
阅读此[ article ]