더북(TheBook)

4.5 평가 순서

지금까지 살펴본 연산자 중 &&, ||, ?:는 조건에 따라 피연산자의 평가 방식이 달라진다. 특히 피연산자의 평가 순서에 차이가 있다. 첫 번째 피연산자는 나머지 피연산자에 대한 조건에 해당하므로 가장 먼저 평가된다.

TAKEAWAY 4.15 &&||?:, 연산자는 항상 첫 번째 피연산부터 평가한다.

콤마 연산자(,)는 앞에서 설명하지 않았는데, 피연산자를 순서대로 평가해서 오른쪽 피연산자에 결과값을 담는 연산자다. 예를 들어 (f(a), f(b))f(a)를 평가한 뒤에 f(b)를 평가하고, 그 결과는 f(b)의 값이 된다. 여기서 주의할 점은 콤마를 나타내는 문자는 C 언어에서 다른 역할도 담당하고 있는데, 그때는 지금과 다른 평가 규칙이 적용된다. 예를 들어 초기화 구문을 구분할 때 사용하는 콤마는 함수 인수를 구분하는 콤마와 속성이 다르다.

콤마 연산자는 깔끔한 코드(clean code) 작성에 도움이 안 되며, 초보자를 헷갈리게만 한다. 가령 a[i, j]는 행렬 A에 대한 이차원 인덱스가 아니라 a[j]다.

TAKEAWAY 4.16 콤마(,) 연산자는 사용하지 않는다.

다른 연산자는 평가에 대한 제약이 없다. 예를 들어 f(a)+g(b)라는 표현식에서 f(a)g(b) 중 어느 것을 먼저 계산해야 하는지 정해진 바가 없다. fg 중 부작용이 발생한다면, 예를 들어 f를 수행하면서 b를 수정한다면 f(a)+g(b)라는 표현식의 결과는 실행 순서에 따라 달라진다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.