programing

시퀀스 점(c)

yoursource 2023. 9. 4. 22:54
반응형

시퀀스 점(c)

명령형 프로그래밍의 시퀀스 포인트는 이전 평가의 모든 부작용이 수행될 것이 보장되고 이후 평가의 부작용이 아직 수행되지 않은 컴퓨터 프로그램 실행의 모든 지점을 정의합니다.

이것은 무엇을 의미합니까?누가 그것을 간단한 말로 설명해 주시겠습니까?

시퀀스 지점이 발생하면 기본적으로 이전의 모든 작업이 완료되었음을 의미합니다.

시퀀스 포인트를 개입시키지 않고 변수를 두 번 변경하는 것은 정의되지 않은 동작의 한 예입니다.

예를들면,i = i++;에 대한 두 변경 사이에 시퀀스 포인트가 없으므로 정의되지 않았습니다.i.

문제를 일으킬 수 있는 변수를 두 번 변경하는 만이 아닙니다.이것은 실제로 다른 용도와 관련된 변화입니다.이 표준은 사물의 순서를 설명할 때 "값 계산 및 부작용"이라는 용어를 사용합니다.예를 들어, 식에서a = i + i++,그i(값 계산) 및i++(부작용)은 임의의 순서로 수행될 수 있습니다.

위키백과에는 C와 C++ 표준의 시퀀스 포인트 목록이 있지만 최종 목록은 항상 ISO 표준에서 가져와야 합니다.C11 부록 C(문단 참조)에서:


다음은 표준에 설명된 시퀀스 포인트입니다.

  • 함수 호출에서 함수 지정자의 평가와 실제 인수 사이의 실제 호출
  • 측정 시스템의 첫 번째 피연산자와 두 번째 피연산자의 평가 사이&&,||,그리고.,;
  • 조건부의 첫 번째 피연산자의 평가 사이?:연산자 및 두 번째 및 세 번째 피연산자 중 평가된 것.
  • 완전한 선언자의 끝;
  • 전체 표현식의 평가와 평가할 다음 전체 표현식 사이입니다.다음은 전체 표현식입니다.
    • 이니셜라이저
    • 표현식 진술의 표현.
    • 선택 문의 제어식(if또는switch);
    • 의 지배적인 표현while또는 do 문;
    • a의 각 표현들for진술;
    • 답신 명세서의 표현식.
  • 라이브러리 함수가 반환되기 직전;
  • 포맷된 각 입력/출력 함수 변환 지정자와 관련된 작업 후;
  • 비교 함수에 대한 각 호출 직전과 직후, 그리고 비교 함수에 대한 호출과 해당 호출에 대한 인수로 전달된 개체의 이동 사이에도 마찬가지입니다.

시퀀스 포인트에 대해 주의해야 할 중요한 점은 시퀀스 포인트가 전역적인 것이 아니라 일련의 로컬 제약 조건으로 간주되어야 한다는 것입니다.예를 들어, 문에서

a = f1(x++) + f2(y++);

x++의 평가와 f1에 대한 호출 사이에는 시퀀스 포인트가 있고, y++의 평가와 f2에 대한 호출 사이에는 또 다른 시퀀스 포인트가 있습니다.그러나 f2가 호출되기 전에 x가 증가할지 아니면 f2가 호출된 후에 y가 증가할지에 대한 보장은 없습니다.만약 f1이 y 또는 f2를 변경한다면, 결과는 정의되지 않을 것입니다. (예를 들어, 컴파일러의 생성된 코드가 read x와 y, increment x, call f1, 이전에 읽었던 값에 대해 y를 확인하고, 만약 변경되었다면, 바니 비디오와 상품을 모두 찾아서 파괴하는 광란을 일으키는 것은 합법적일 것입니다.)실제로 그렇게 할 수 있는 코드, 아아, 하지만 그것은 표준에 따라 허용될 것이다.)

paxdiablo의 답변을 예로 들어 확장합니다.

진술을 가정합니다.

x = i++ * ++j;

: 세가부이있다의 입니다. 다음의 결과를 할당합니다.i * (j+1)i에 1을 추가하고 j에 1을 추가하는 x에 1을 추가합니다.부작용이 적용되는 순서는 지정되지 않았습니다. i와 j는 평가 직후에 각각 증가하거나, 둘 다 평가된 후 x가 할당되기 전까지 증가하지 않거나, x가 할당되기 전까지 증가하지 않을 수 있습니다.

시퀀스 점은 부작용이 적용된 순서에 관계없이 모든 부작용이 적용된 점(x, i 및 j가 모두 업데이트됨)입니다.

이는 컴파일러가 펑키한 최적화, 트릭 및 마법을 수행할 수 있지만 소위 시퀀스 포인트에서 잘 정의된 상태에 도달해야 한다는 것을 의미합니다.

언급URL : https://stackoverflow.com/questions/3575350/sequence-points-in-c

반응형