Skip to content

85. 시퀀스 포인트(Sequence Point)


1. 키워드

  • 시퀀스 포인트(Sequence Point)


2. 시퀀스 포인트

  • C에서 모든 식의 계산(평가)이 완료되는 지점을 시퀀스 포인트라고 한다.
  • 그리고 시퀀스 포인트 사이에서 식의 값은 한 번만 수정될 수 있다.


  • 먼저 대표적인 시퀀스 포인트는 ;(세미콜론)인데 다음 코드는 ; 사이에서 값이 두 번 수정된 잘못된 코드이다.


//       ↓ 시퀀스 포인트
int i = 0;

i = i++;
//     ↑ 시퀀스 포인트


  • 코드가 여러 줄로 되어 있지만 중간에 빈 줄은 무시하고 ; 사이의 식만 보면 된다.
  • i = i++ 식을 보면 ii = i에서 값이 한 번 수정되고 i++에서 다시 수정된다.
  • i = i의 결과는 바뀐 것이 없지만 일단 값을 할당했으므로 값이 수정된 것이다.


int i = 0;

//↓ 값이 수정됨
i = i++;
//   ↑ 값이 수정됨


  • 이 코드는 GCC에서는 Wsequence-point 또는 -Wall 옵션을 사용하여 경고를 출력할 수 있다.


gcc main.c -Wsequence-point
main.c: In function ‘main’:
main.c:7:7: warning: operation on ‘i’ may be undefined [-Wsequence-point]
     i = i++;
       ^


  • i = i++와 같이 의도가 명확하지 않은 코드를 정의되지 않은 행동(Undefined Behavior)이라고 부르는데 컴파일러에 따라 결과가 달라질 수 있으므로 이런 코드의 작성은 피해야 한다.


  • 물론 다음과 같이 ++ 연산자를 사용한 뒤 다른 변수에 저장하는 것은 올바른 코드이다.
  • 왜냐하면 ji 모두 한 번씩 수정되기 때문이다.


int i = 0;
int j;

j = i++;

References