CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): heloise (오후의햇살)
날 짜 (Date): 2002년 3월 22일 금요일 오전 03시 09분 04초
제 목(Title): Re: 연산우선순위


이 부분에 대해선, K&R에 어느정도의 설명이 있는 듯 합니다.
2nd  edition section 2.12에 보면,
a[i] = i++;
이 예로 나오는데, 이 결과는 implementation-dependent입니다.
위의 expression을 처리함에 있어,
i를 increment하는 side-effect가 언제 일어날까는,
위 expression내에서는 compiler마음입니다.
그러니까, i가 원래 3이었으면, 위의 연산이
a[3]에 i++을 집어넣는 결과를 가져올수도 있고,
a[4]에 값을 집어넣는 결과를 가져올수도 있겠죠.
expression내부에서, subexpression evaluation의 
order는 machine에 따라 가장 effective한게
달라질수도 있기 땜에, 이렇게 implementation-dependent로
정해져있다고 써있네요.
그럼, i의 값은 언제 increment되는 게 guarantee될까요?
C Standard에 보면, "sequence point"라는 개념이 있습니다.
sequence point의 예는 
the call to a function, after tue arguments have been evaluated
혹은
the end of a full expression
뭐 이런 것들이 있는데,
i++에서 i가 increment되는 것 같은 side effect들은,
가장 가까운 다음 sequence point에서만, 일어나는게
guarantee되면 됩니다.
위의 예제에서는, example expression이 다끝나고 난 때에
i가 increment되어 있으면 되니까,
그 다음 code 부터는, i의 값이 guarantee되겠지요.

질문에 대해 엉뚱한 대답을 하는 건 아닌지 모르겠네요, 쩝.
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.