簡體   English   中英

CppCheck警告:表達式取決於x = x | =(1 << 3)中的評估順序

[英]CppCheck warning: expression depends on order of evaluation in x = x |= (1 << 3)

C中的代碼行是

x = x |= (1 << 3);

給出cppCheck錯誤:“表達式'x = x | = 1'取決於副作用的評估順序”

而線

x |= (1 << 3);

沒關系。

我想

x = x |= (1 << 3);

應該是一樣的

x = x = x | (1 << 3);

這只是

x = (x = (x | (1 << 3)));

實際上x的外部賦值沒有效果,這意味着結果與之相同

x |= (1 << 3);

那么CppCheck究竟在這里抱怨什么呢?

編輯:認為這是為什么j = j++與上面提到的問題中討論的j++相同或不同的重復。

@Cornstalks 關於序列點鏈接引用了這一點。

兩次修改相同值的表達式是不需要允許的可憎行為(或者在任何情況下,不需要明確定義,即我們不必找出說出他們做什么的方式,以及編譯器不必支持它們)。

C標准並不強制要求任何關於這些類型的表達式的內容,因此在所有環境中都沒有特定的評估順序。

一個相當快速和簡單的解釋:

就副作用(對x的修改)而言, x = x |= 1幾乎等於x = x += 1 x = x += 1相當於C中的x = ++x 。該表達式是一個眾所周知的未定義表達式

閱讀更多相關信息[這里]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM