Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C와 C++에서 쉼표(,)의 두 가지 용법: 연산자와 구분자

C 또는 C++에서 쉼표(,)는 서로 다른 목적으로 사용됩니다. 겉보기에는 같은 기호이지만, 문맥에 따라 연산자로 동작하기도 하고 구분자로 동작하기도 합니다. 이 글에서는 두 가지 용법의 차이점과 실제 동작 방식을 예제와 함께 살펴보겠습니다.

1. 연산자로서의 쉼표 (Comma Operator)

쉼표 연산자는 이항(binary) 연산자입니다. 먼저 왼쪽 피연산자를 평가한 뒤 그 결과를 버리고, 이어서 오른쪽 피연산자를 평가하여 그 값을 최종 결과로 반환합니다. 특히 쉼표 연산자는 C와 C++ 전체 연산자 중 가장 낮은 우선순위를 가진다는 점을 기억해야 합니다.

예제

#include<stdio.h>
int main() {
    int x = (50, 60);
    int y = (func1(), func2());
}

위 코드에서 x에는 50이 아닌 60이 할당됩니다. 쉼표 연산자는 마지막 피연산자의 값만 반환하기 때문입니다. 두 번째 문장에서는 func1()이 먼저 실행된 후 func2()가 순차적으로 실행되며, y에는 func2()의 반환값이 저장됩니다.

2. 구분자로서의 쉼표 (Comma Separator)

함수 호출이나 정의, 변수 선언에서 쉼표는 구분자(separator) 역할을 합니다. 이 경우는 쉼표 연산자와 전혀 다릅니다. 구분자로 사용된 쉼표는 나열된 모든 항목이 유효하게 처리되지만, 연산자로 사용된 쉼표는 마지막 값만 남는다는 차이가 있습니다.

예제

#include<stdio.h>
int main() {
    int x = 5, y = 10;
    void function(x, y);
}

위 코드에서 xy는 각각 별개의 변수로 선언되며, 함수 호출 시 두 값 모두 인수(argument)로 전달됩니다.

쉼표 연산자의 실제 동작 확인

다음 프로그램은 증감 연산자와 함께 쉼표 연산자가 어떻게 동작하는지 보여줍니다.

예제

#include<stdio.h>
main() {
    int a = 50;
    int b = (a++, ++a);
    printf("%d", b);
}

출력

52

실행 과정을 살펴보면 다음과 같습니다. 먼저 a++(후위 증가)가 실행되어 a는 51이 되지만, 이 표현식의 값은 버려집니다. 이어서 ++a(전위 증가)가 실행되어 a는 52가 되고, 쉼표 연산자는 이 마지막 값을 반환하므로 b에는 52가 저장됩니다.

정리

  • 연산자로 사용될 때: 좌변을 평가한 뒤 결과를 버리고, 우변의 값만 반환합니다. 우선순위가 가장 낮습니다.
  • 구분자로 사용될 때: 함수 인수 목록, 변수 선언 등에서 항목들을 나열하며, 모든 항목이 유효하게 사용됩니다.

두 용법을 혼동하면 의도하지 않은 결과를 얻을 수 있으므로, 코드를 작성할 때 쉼표의 역할을 정확히 구분하는 것이 중요합니다.