시퀀스 포인트 란 무엇입니까?

컴퓨터 프로그래밍의 시퀀스 포인트는 변수의 값이 완전히 계산 될 때 프로그램 실행 중에 발생하는 순간으로, 이전 연산에서 보류중인 변경 사항이없고 향후 표현식에서 아직 계산이 수행되지 않습니다. "for"및 "if"와 같은 명령문에서 제어 표현식의 끝과 같이 함수 내에서 코드를 실행하기 전과 같이 주로 C 언어 표준에 정의 된 시퀀스 포인트가 존재하는 여러 위치가 있습니다. 간단한 C 코드 라인과 같은 완전한 표현식의 끝에 시퀀스 포인트를 정의하는 몇 가지 이유는 모호한 상황을 피하고, 정의되지 않은 동작을 발생 시키거나, 컴파일러를 혼동시키고 예측할 수없는 코드를 생성 할 수 있기 때문입니다. 대부분의 경우 프로그래머는 시퀀스 포인트에 대해 명시 적으로 걱정하지 않지만 컴파일러를 만들 때 코드가 올바르게 실행되도록하는 개념이 매우 중요합니다.

C 프로그래밍 언어에서 시퀀스 포인트의 예는 명령문 A = A + B;에 있습니다. 이 표현에서 세미콜론은 시퀀스 포인트입니다. 식이 완료되면 A 값이 평가되고 다음식이 시작될 때까지 잔차 계산이 수행되지 않습니다. 등호는 시퀀스 포인트가 아닙니다. A 값은 식 전체에서 임의의 순서로 컴파일러에 의해 수정 될 수 있기 때문입니다.

시퀀스 포인트의 기본 규칙은 값의 변화를 계산하는 것 이외의 목적으로 포인트간에 변수에 두 번 이상 액세스하지 않는 것입니다. 이 규칙의 위반은 배열에 값을 할당 할 때 가장 잘 표현됩니다. 변수 A와 I라는 배열이 있고 문법적으로 C에는 I [A] = A ++ 식을 쓸 수 있습니다. 여기서 변수는 현재 값을 평가하는 것 이외의 목적으로 두 번 이상 액세스됩니다. 즉, 배열 I에 대한 인덱스로 사용됩니다. 이는 컴파일러가 인덱스로 사용되기 전에 또는 사용 된 후에 A를 증가시켜 프로그램에서 신뢰할 수없는 예측할 수없는 동작을 생성 할 수 있음을 의미합니다.

시퀀스 포인트는 기본적으로 컴파일러가 명령문을 일관되게 평가하고 실행할 수 있도록하는 방법으로 볼 수 있습니다. 또한 정의 된 동작이 예측 가능하기 때문에 컴파일러가 최적화 전략을 사용할 수 있습니다. C 언어 표준에는 함수가 실행을 시작할 때, 논리 연산자와 쉼표, 세미콜론으로 끝나는 완전한 식의 끝, 대부분의 C 문에서와 같이 시퀀스 포인트의 세 가지 주요 인스턴스가 있습니다. .

다른 언어

이 문서가 도움이 되었나요? 피드백 감사드립니다 피드백 감사드립니다

어떻게 도와 드릴까요? 어떻게 도와 드릴까요?