Re: [問題] 陣列的指標+1怎麼不是下一格

看板C_and_CPP作者 (stu)時間12年前 (2011/12/15 15:02), 編輯推噓3(3014)
留言17則, 6人參與, 最新討論串2/2 (看更多)
提到這些未定義行為 有一個說法是這樣的 一個變數在一句敘述內被給值兩次以上就會發生 前一陣子在版上有看到 有人提出a^=b^=a^=b;的方式交換變數 結果畫出語法樹之後 不管有無括號都有可能出錯 所以不可行 但是我想到一個以前的問題 比方說有四個變數a, b, c, d 如果這樣寫 a = b = c = d; 每個變數都只有一次給值 那麼結果會讓abc都變成d的值嗎? 會不會有編譯器弄出的程式 結果變成a=b; b=c; c=d;這樣的效果? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.210.62

12/15 15:05, , 1F
這個倒不會 這是因為 = 被規定為右結合的關係
12/15 15:05, 1F

12/15 15:06, , 2F
那個例子之所以會錯是因為我們無法正確得知對 a 的設值取值
12/15 15:06, 2F

12/15 15:06, , 3F
的順序的關係 和 ^= 是右結合並沒有關係
12/15 15:06, 3F

12/15 15:07, , 4F
a^=b^=a^=b; 的實際運算依然是由右至左 只是我們無法確定
12/15 15:07, 4F

12/15 15:07, , 5F
那個 a 的新值什麼時候進去
12/15 15:07, 5F

12/15 15:08, , 6F
而這個情形裡並沒有任何一個動作的順序和結果有關
12/15 15:08, 6F

12/15 15:08, , 7F
所以 a=b=c=d; 是安全的
12/15 15:08, 7F

12/15 16:43, , 8F
感謝。所以重點是取值與設值的順序
12/15 16:43, 8F

12/15 16:44, , 9F
那麼a+=b+=c+=d;應該也是安全的
12/15 16:44, 9F

12/15 17:22, , 10F
有順序性跟沒有順序性的指令...
12/15 17:22, 10F

12/16 00:24, , 11F
還是別玩這些東西搞自己比較實在
12/16 00:24, 11F

12/16 06:09, , 12F
不能同意樓上更多
12/16 06:09, 12F

12/16 09:54, , 13F
建議不用花太多心思在這裡,因為陷阱多到學也學不完...
12/16 09:54, 13F

12/16 09:54, , 14F
如果有簡單又安全的寫法,就用簡單又安全的寫法吧。
12/16 09:54, 14F

12/16 15:02, , 15F
我的想法比較不一樣吧,如果是未定義
12/16 15:02, 15F

12/16 15:03, , 16F
我會希望能回答出這是未定義,而不是回答我不會這樣寫
12/16 15:03, 16F

12/16 16:07, , 17F
你是主考官嘛? "我會希望能回答出這是未定義"
12/16 16:07, 17F
文章代碼(AID): #1EwPkIXf (C_and_CPP)
文章代碼(AID): #1EwPkIXf (C_and_CPP)