[問題] Sequence Point

看板C_and_CPP (C/C++)作者 (殺拉頂)時間13年前 (2012/10/25 14:54), 編輯推噓3(3018)
留言21則, 7人參與, 最新討論串1/1
最近剛好看到Sequence Point這個名詞, 看了一些相關資料, 有人提到 C99 draft standard上的定義, 其中有一條如下: Annex C —The end of a full expression: an initializer (6.7.8); the expression in an expression statement (6.8.3); the controlling expression of a selection statement (if or switch) (6.8.4); the controlling expression of a while or do statement (6.8.5); each of the expressions of a for statement (6.8.5.3); the expression in a return statement(6.8.6.4). 上面幾條都蠻好理解的, 除了第二條!! 用簡單的數字計算來說, expression在C99提到的是由operator跟operand所組成的, 而且expression statment = expression ";" <--就是加個分號啦~~ 所以以下的例子: A = A + i++; i++ 這個算不算是個expression?? 而且它是不是一個Sequence Point?? 在網路上查到的資料是說它不是Sequence Point, 上面那個例子的sequence point在分號, 所以更新i的值的動作, 到分號之前的任何一個時間點都允許發生....... 但是呢 就我看來 上面那個例子裡的 i++ 就是符合Sequence Point的定義阿!!! : the expression in an expression statement (6.8.3); 請問這邊該要如何理解跟解釋它呢?? 搞的頭好痛....... 麻煩大家了..... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.152.159 ※ 編輯: saladim 來自: 114.37.152.159 (10/25 14:56) ※ 編輯: saladim 來自: 114.37.152.159 (10/25 14:58) ※ 編輯: saladim 來自: 114.37.152.159 (10/25 14:59)

10/25 15:20, , 1F
前陣子有一樣問題,這篇挺詳細的,不知您閱過沒?
10/25 15:20, 1F

10/25 16:07, , 3F
這裡指的是 assignment-expression
10/25 16:07, 3F

10/25 16:08, , 4F
定冠詞 the
10/25 16:08, 4F

10/25 16:12, , 5F
"A = A + i++" => "the" expression in expr. state.
10/25 16:12, 5F

10/25 17:23, , 6F
&& || ?: , 這四個運算子是順序點你都不一定記得住了
10/25 17:23, 6F

10/25 17:23, , 7F
還去看什麼 standard 自己找自己麻煩而已
10/25 17:23, 7F

10/26 06:46, , 8F
比較模糊的問題在 C11 有定義清楚了,不過我沒時間看。
10/26 06:46, 8F

10/26 06:50, , 9F
當然你這只是簡單的狀況,i++ 的運算結果就是 i 原值。
10/26 06:50, 9F

10/26 07:05, , 10F
l and C大 你們的意思是說 "the expression"代表 Assignment
10/26 07:05, 10F

10/26 07:05, , 11F
expression這樣嗎?
10/26 07:05, 11F

10/26 07:14, , 12F
先感謝各位 樓上的問題就是偶的疑問~若是這樣的話可以解釋
10/26 07:14, 12F

10/26 07:15, , 13F
那其實問題會在:i=i++ + A++; 若是Sequence Point在 i++
10/26 07:15, 13F
※ 編輯: saladim 來自: 114.37.152.159 (10/26 07:16)

10/26 07:17, , 14F
則在執行到A++時 i的"值"應該已經被更新了, 所以在作
10/26 07:17, 14F

10/26 07:18, , 15F
assigment時 i的值應該為更新後的值, 但是資料是說sequenc
10/26 07:18, 15F

10/26 07:19, , 16F
point在分號 也就是說 可能在整個式子eval完, i才被加一
10/26 07:19, 16F

10/26 07:21, , 17F
分別大概是 一個有固定結果 一個是看更新值的動作在被允許
10/26 07:21, 17F

10/26 07:21, , 18F
的範圍內的哪個地方發生來決定 根據結果論 後面那個才是
10/26 07:21, 18F

10/26 07:22, , 19F
standard表達的意思 @_@||
10/26 07:22, 19F

10/26 07:23, , 20F
p.s.我知道是八誡 但是看到怪怪的地方想了解一下而已
10/26 07:23, 20F

10/26 07:24, , 21F
p.s2: i = i++ + i++; 可能也是個例子
10/26 07:24, 21F
※ 編輯: saladim 來自: 114.37.152.159 (10/26 07:26)
文章代碼(AID): #1GYE913N (C_and_CPP)
文章代碼(AID): #1GYE913N (C_and_CPP)