2011-01-16 5 views
0

평가 순서가 "왼쪽에서 오른쪽"으로 지정되고 언어가 (의사) C와 유사한 경우 다음 예제의 시퀀스 포인트 인 ?시퀀스가 ​​왼쪽에서 오른쪽으로 평가 순서가있는 언어를 가리 킵니까?

int x = 1; 
int z = x-- + x; // z = 1 + 0 or z = 1 + 1? 
my_func(x++); // x incremented before or after my_func execution? 
my_func(x++ + --x); // combining those above 
+4

C의 "시퀀스 지점"은 정확한 정의를가집니다. "(유사) C와 같은"언어가 시퀀스 포인트를 같은 방식으로 정의합니까? –

+0

이것들은 제 연습 문제에서 발췌 한 것입니다. 텍스트는 정확하게 썼습니다. "동적 범위 지정을 사용하는 C 언어, 얕은 바인딩 및 왼쪽에서 오른쪽으로의 표현 평가". 더 이상은 ... – gremo

답변

2

시퀀스 포인트는 언어 표준 시퀀스 포인트로 정의하는 것이다. 제가 제시하려고하는 답변은 C에 적용되지만 다른 "C와 유사한"언어는 다른 시퀀스 포인트를 매우 잘 정의 할 수 있으므로 이러한 질문에 대해 다른 답변을 얻을 수 있습니다. + 이후

int z = x-- + x; // z = 1 + 0 or z = 1 + 1? 

는 C의 시퀀스 지점없고, 상기 설정의 결과는 정의되지 않는다.

my_func(x++); // x incremented before or after my_func execution? 

xmy_func이 실행되기 전에 증가하지만, my_func는 인수로 x의 이전 값으로 호출된다.

my_func(x++ + --x); // combining those above 

첫 번째 것과 같은 이유로 정의되지 않았습니다.

+0

z = ++ x + y ++의 경우는 어떨까요? 이 문은 정의되지 않아야합니다. 맞습니까? – gremo

+0

@Gremo : 예, 정의되었습니다. 'x'와'y'는 모두 하나씩 증가하고'z'는'x'의 새로운 값과'y'의 이전 값의 합입니다. 그것은 시퀀스 포인트와는 아무 관련이 없습니다. – sepp2k

+0

x = 1 인 경우; y = 2; z = 2 + 2; y = 3입니다. 시퀀스 포인트가 무엇인지 오해 한 것일까 요? – gremo

관련 문제