[英]Is array[x, y] a valid C expression?
當參考以下關於宏https://gcc.gnu.org/onlinedocs/gcc-2.95.3/cpp_1.html#SEC12的文檔時,我看到 array[x, y] 作為參數傳遞。 它是有效的 C 表達式嗎? 如果是這樣,它有什么作用?
請注意,文檔中的相關代碼正在討論如何處理 arguments 到宏的細節:
實際 arguments 中的括號必須平衡; 括號內的逗號不會結束參數。 但是,不需要括號或大括號來平衡,並且它們不會阻止逗號分隔 arguments。 因此,
macro (array[x = y, x + 1])
將兩個 arguments 傳遞給宏:
array[x = y
andx + 1]
。 如果您想提供array[x = y, x + 1]
作為參數,則必須將其寫為array[(x = y, x + 1)]
,這相當於 C 代碼。
另外,請注意 GCC 版本 2.95 文檔非常舊(可以追溯到1999 年)。 這些天您通常不需要咨詢。 也就是說,這方面在此期間沒有改變。
如評論中所述,在宏的上下文之外,符號:
array[x = y, x + 1]
使用逗號運算符計算 LHS(賦值x = y
),然后使用 RHS(表達式x + 1
)作為數組的索引。 如果沒有一些帶有副作用的語句(例如賦值或 function 調用),則表示法毫無意義。 然而,它的定義很好。 並且在逗號運算符的 LHS 和 RHS 的評估之間存在一個序列點,這在示例中很重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.