[英]The comma operator example in ansi c 1999 TC3
當我試圖找出結果時, !0
的結果是實現定義,期望它不等於零,我只是讀了一些令我困惑的東西。
(順便說一句,它可以在某些實現-1
或1
還是嚴格定義?如果我可以在評論中告訴別人,那會很好)
但是我真正的問題是:
在
6.5.17逗號運算符2
據說:
如果試圖修改逗號運算符的結果或在下一個序列點之后訪問它,則行為是不確定的。
恰好在下一行中,有一個示例如何使用逗號運算符將參數解析為函數。
f(a, (t=3, t+2), c);
但是,就我所知,該示例到目前為止尚未定義行為,不是嗎? 由於給t
分配了3
,在下一個序列中它增加了2
。
但是標准沒有提到該示例無效。
還是將作業理解為修改?
!0
等於1
(t=3, t+2)
,在賦值和對t
的訪問之間存在一個序列點。 定義了表達式,計算結果為5
,將值3
在t
。 如果兩者之間沒有序列點,例如(t=3)+(t+2)
,則將是不確定的。 我不確定是什么促使您提出這個問題。 您從示例中摘錄的標准部分明確指出:
如語法所示,逗號運算符(如本節中所述)不能出現在使用逗號分隔列表中的項(例如函數的參數或初始化程序列表)的上下文中。 另一方面,在這種情況下,可以在帶括號的表達式中或條件運算符的第二個表達式中使用它。 在函數調用中
f(a, (t=3, t+2), c)
該函數具有三個參數,第二個參數的值為5。
強調相關部分以澄清您的疑問。
逗號運算符引入了一個序列點,因此應明確定義行為(首先將t
設置為3
,然后將2
加到t
得到結果5
但在t
保留3
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.