看板 C_and_CPP 關於我們 聯絡資訊
最近剛好看到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)
EdisonX:前陣子有一樣問題,這篇挺詳細的,不知您閱過沒? 10/25 15:20
loveme00835:這裡指的是 assignment-expression 10/25 16:07
loveme00835:定冠詞 the 10/25 16:08
Chikei:"A = A + i++" => "the" expression in expr. state. 10/25 16:12
purpose:&& || ?: , 這四個運算子是順序點你都不一定記得住了 10/25 17:23
purpose:還去看什麼 standard 自己找自己麻煩而已 10/25 17:23
tinlans:比較模糊的問題在 C11 有定義清楚了,不過我沒時間看。 10/26 06:46
tinlans:當然你這只是簡單的狀況,i++ 的運算結果就是 i 原值。 10/26 06:50
rifiz:l and C大 你們的意思是說 "the expression"代表 Assignment 10/26 07:05
rifiz: expression這樣嗎? 10/26 07:05
saladim:先感謝各位 樓上的問題就是偶的疑問~若是這樣的話可以解釋 10/26 07:14
saladim:那其實問題會在:i=i++ + A++; 若是Sequence Point在 i++ 10/26 07:15
※ 編輯: saladim 來自: 114.37.152.159 (10/26 07:16)
saladim:則在執行到A++時 i的"值"應該已經被更新了, 所以在作 10/26 07:17
saladim:assigment時 i的值應該為更新後的值, 但是資料是說sequenc 10/26 07:18
saladim:point在分號 也就是說 可能在整個式子eval完, i才被加一 10/26 07:19
saladim:分別大概是 一個有固定結果 一個是看更新值的動作在被允許 10/26 07:21
saladim:的範圍內的哪個地方發生來決定 根據結果論 後面那個才是 10/26 07:21
saladim:standard表達的意思 @_@|| 10/26 07:22
saladim:p.s.我知道是八誡 但是看到怪怪的地方想了解一下而已 10/26 07:23
saladim:p.s2: i = i++ + i++; 可能也是個例子 10/26 07:24
※ 編輯: saladim 來自: 114.37.152.159 (10/26 07:26)