| [ 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되겠지요. 질문에 대해 엉뚱한 대답을 하는 건 아닌지 모르겠네요, 쩝. |