foo()我很好奇將函式的輸出分配給變數然后在邏輯否定!運算子之前加上前綴與在函式之前直接在邏輯否定運算子之前添加前綴之間是否有任何區別。即是
int output = foo();
if(!output){
}
正式等同于:
if(!foo()) {
}
uj5u.com熱心網友回復:
這可能不是您所想的,但它是您的兩個示例代碼片段之間的區別,也是一個重要的區別:
int output = foo();
if (!output) {
...
}
...
變數output,以及函式回傳的值,可用于 if 陳述句內部和下方的代碼。!在您的另一個示例中,從函式回傳的值對 if 條件內的運算子不可用。
這可能是選擇一種或另一種形式的最重要的實際原因;除了 if 條件之外,您是否需要該值?如果是這樣,您需要該變數。
uj5u.com熱心網友回復:
除了@zwol 提到的差異之外,沒有邏輯上的差異。該運算式! foo()被處理為“呼叫 foo()”,然后“否定回傳值”。
output = foo();然后執行! output“呼叫 foo()”然后“將回傳值保存在變數輸出中”然后“否定輸出中的值”。結果相同。
事實上,編譯器可能會優化掉變數output- 取決于背景關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/513301.html
標籤:C句法否定
上一篇:在malloc之后,Valgrind出現“大小為8的無效寫入”錯誤
下一篇:二維陣列大小(以位元組為單位)
