簡體   English   中英

ANSI C 1999 TC3中的逗號運算符示例

[英]The comma operator example in ansi c 1999 TC3

當我試圖找出結果時, !0的結果是實現定義,期望它不等於零,我只是讀了一些令我困惑的東西。

(順便說一句,它可以在某些實現-11還是嚴格定義?如果我可以在評論中告訴別人,那會很好)

但是我真正的問題是:

6.5.17逗號運算符2

據說:

如果試圖修改逗號運算符的結果或在下一個序列點之后訪問它,則行為是不確定的。

恰好在下一行中,有一個示例如何使用逗號運算符將參數解析為函數。

f(a, (t=3, t+2), c);

但是,就我所知,該示例到目前為止尚未定義行為,不是嗎? 由於給t分配了3 ,在下一個序列中它增加了2

但是標准沒有提到該示例無效。

還是將作業理解為修改?

  1. !0等於1
  2. (t=3, t+2) ,在賦值和對t的訪問之間存在一個序列點。 定義了表達式,計算結果為5 ,將值3t 如果兩者之間沒有序列點,例如(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.

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