C 언어 · 표현식

C 표현식 평가 순서 파서

연산자 우선순위와 결합 방향을 기준으로 표현식을 트리로 쪼개고, 증가 연산자와 대입이 변수 값에 반영되는 시점을 단계별로 추적한다.

01

토큰 분리

변수, 상수, 연산자, 괄호를 의미 단위로 나눈다.

lexing
02

괄호 우선 적용

괄호 안 표현식을 먼저 하나의 하위 트리로 묶는다.

grouping
03

우선순위 결합

곱셈, 덧셈, 비교, 논리, 대입 순서로 트리 높이를 만든다.

precedence
04

부작용 반영

전위와 후위 증가, 대입의 결과값이 변수 저장소에 언제 반영되는지 표시한다.

side effect
++i
증가 후 값 사용 변수 값을 먼저 바꾸고 그 결과가 표현식 값이 된다.
전위
i++
값 사용 후 증가 현재 값을 표현식에 넘긴 뒤 저장된 변수 값을 증가시킨다.
후위
= 연산자
오른쪽 결합 a = b = c는 b = c 결과를 다시 a에 대입하는 식으로 묶인다.
right associative

안전한 풀이법

괄호 추가 의도한 묶음을 명확히 하려면 괄호를 적극적으로 쓴다.
부작용 분리 같은 변수에 대한 증가와 읽기를 복잡한 한 줄에 섞지 않는다.
표로 추적 각 단계의 변수 값과 표현식 값을 따로 적으면 실수가 줄어든다.