0
我有以下標誌枚舉定義(使用可可宏):枚舉值定義裏面的逗號?
typedef NS_OPTIONS(uint64_t, ItemDataType) {
...
A = (1 << 16),
B = (1 << 17),
C = (1 << 18),
...
G = (1 << 31),
TEST = (A | B | C, G)
};
TEST
應該是(A | B | C | G)
,但我們做了一個錯字,進入(A | B | C, G)
。這個符號是什麼意思? TEST
的實際值是多少?這不是一個編譯器錯誤嗎?
的關鍵是括號:
gcc
在這種情況下,如果我使用-Wall
標誌給了我一個錯誤,但也警告。如果沒有括號,那麼它會存儲'A |的值B | C',但就目前而言,它存儲'G'的值。逗號運算符具有任何C運算符的最低優先級,並充當序列點。 – Brian你能否提供一個真實世界的例子,這個操作符將被用在像這樣的上下文中?編譯器至少應該發出警告。 –
@LeoNatan:爲什麼要發出警告?會(a + = 2,b + = 3);發出警告?如果這是預期的效果呢? – Brian