對不起,如果這是一個愚蠢的問題,但我遇到了用C語言編寫的這一行代碼,使我迷惑了來自JavaScript背景。C在IF聲明中的作業
short s;
if ((s = data[q])) return s;
這是分配數據[q],如果它等於真/ 1返回s?
對不起,如果這是一個愚蠢的問題,但我遇到了用C語言編寫的這一行代碼,使我迷惑了來自JavaScript背景。C在IF聲明中的作業
short s;
if ((s = data[q])) return s;
這是分配數據[q],如果它等於真/ 1返回s?
你的代碼被分配到data[q]
和s
然後返回s
到if
聲明。在s
不等於0
的情況下,您的代碼將返回s
,否則將轉到下一條指令。
或者更好表示,將擴大到以下幾點:
short s;
s = data[q];
if (s != 0)
return s;
哦,這很有趣。那麼任何其他的值都不是0?因爲我從JavaScript學到的東西是如果(真)返回一些東西。 – cocacrave
C中不是'0'的每個值都被認爲是真的。 –
基本上Ç計算表達式。在
s = data[q]
data[q]
的值是這裏的表達式的值和條件是基於該評價。
分配
s <- data[q]
只是一個side-effect
。
閱讀本[ article ]的順序點和副作用
明白了,謝謝 – cocacrave
是的,你是對的。這已被討論[這裏](http://stackoverflow.com/questions/151850/why-would-you-use-an-assignment-in-a-condition) – byxor
基本上它返回s只要data [q]是!= 0。在C中,除0之外的所有內容都是真實的。 (當然s被分配數據[q])。 – Nidhoegger