쉼표 연산자란?
C/C++에서 쉼표 연산자(comma operator)의 목적은 여러 개의 표현식을 하나로 이어 붙여 순차적으로 실행하는 것입니다. 쉼표로 구분된 표현식 목록의 값은 항상 가장 오른쪽에 있는 표현식의 값이 됩니다. 즉, 쉼표 연산자는 일련의 연산이 차례대로 수행되도록 만드는 역할을 합니다.
이때 나머지 표현식들의 값은 모두 버려집니다. 따라서 가장 오른쪽 표현식의 값이 전체 쉼표 구분 표현식의 최종 결과값이 됩니다. 예를 들어 다음과 같습니다.
var = (count = 19, incr = 10, count+1);
위 코드가 실행되면 먼저 count에 19가 대입되고, 그다음 incr에 10이 대입됩니다. 이후 count에 1을 더한 값이 계산되며, 마지막으로 var에는 가장 오른쪽 표현식인 count+1의 값인 20이 대입됩니다. 여기서 괄호가 반드시 필요한 이유는 쉼표 연산자의 우선순위가 대입 연산자보다 낮기 때문입니다.
쉼표 연산자의 실제 동작을 확인해 보려면 아래 프로그램을 직접 실행해 보세요.
예제 코드
#include <iostream>
using namespace std;
int main() {
int i, j;
j = 10;
i = (j++, j+100, 999+j);
cout << i;
return 0;
}실행 결과
1010
i 값이 계산되는 과정
변수 i의 값이 도출되는 절차는 다음과 같습니다.
- j는 10으로 시작합니다.
- 후위 증가 연산(j++)에 의해 j는 11이 됩니다.
- 그다음 표현식 j+100이 평가되지만, 그 결과는 버려집니다.
- 마지막으로 j(여전히 11)에 999를 더한 1010이 전체 표현식의 값이 되어 i에 대입됩니다.
핵심 포인트 정리
- 쉼표 연산자는 왼쪽에서 오른쪽 순서로 표현식을 평가합니다.
- 전체 표현식의 값은 가장 오른쪽 표현식의 값입니다.
- 대입 연산자보다 우선순위가 낮으므로 괄호 사용이 필수적입니다.
- for 문에서 여러 변수를 초기화하거나 갱신할 때 유용하게 활용됩니다.