본문 바로가기
배운 것들 메모/따라 배우는 C언어

[홍정모의 따라하며 배우는 C언어] 6.11 콤마 연산자 (, Comma)

by 야속한 낭만 2024. 10. 11.

6.11 콤마 연산자 (, Comma)

 

콤마 연산자는 커다란 표현식에서 두 가지 기능을 같이 수행하고 싶을 때, 쓸 수 있기도 하다.

다만,

 

이런 식으로 혼합되어서 변수를 선언하는 것은 불가능하다.

 

 

또, 위에서 쓴 것과 다르게 이번 예시는 , 라는 기호를 쓰지만 콤마 연산자는 아니다.

이것은 separtors로서, Argument를 구분해주는 역할을 한다.

 

또한

 

 

쉼표 연산자: , | Microsoft Learn

 

여기서 쉼표 연산자는 순차적으로 계산하는데 쓰인다.

즉, i++의 값이 증가하고 j에 i를 넣는다.

i = 2 j = 2이므로 2 2가 출력된다.

 

그러니까 콤마가 없었으면 하나하나 초기화하고 대입하는 형식이었더라면, 콤마 연산자는 그것을 더 간편하게 한 줄로 쓸 수 있게 만든다.

 

 

#include <stdio.h>
int main () {
   int i = 10, b = 20, c= 30;
   i = b, c;
   printf("%i\n", i);

   i = (b, c);
   printf("%i\n", i);
}

위에는 20이고 아래는 30이다.

왜 이런 차이가 발생할까?

 

콤마 연산자 계산 방향

 

먼저 콤마 연산자와 할당 연산자의 우선순위와 계산 방향이 서로 다르다.

그래서

i = b, c; 부분은

i = b; 이 실행되어 20이 할당된다.

그 다음 , 가 실행되어 c의 값이 오지만, 결과에는 영향을 주지 않는다.

따라서 i에 20이 들어간다.

i = (b, c);

콤마 연산자는 왼쪽에서 오른쪽으로 순차적으로 실행된다. 따라서 b가 먼저 실행되고 그 다음 c가 실행, 그 값을 return 한다.

(b, c)에서 b는 실행되기는 하지만, 결과에 영향을 주지 않는다.

i는 c의 값이 할당되어 30이 된다.

이렇게 연산자끼리의 우선 순위가 영향을 주기도 하지만, 연산자가 왼쪽에서 오른쪽으로 처리하는지, 아니면 오른쪽에서 왼쪽으로 처리하는 지에 따라 달라진다.

 


 

Right-to-left와 Left-to-right의 간단한 보충설명

i = 2; → 2를 오른쪽에서 왼쪽인 i로 옮김

int a, b, c;
a = (b = 1, c = 4);

 

순서 () → = → ,

즉, b는 1에 할당하고 그 다음 c는 4에 할당함.

그 다음 콤마 연산자는 c = 4의 값인 4를 return.

결론적으로 a는 4가 됨.

그니까 뭉탱이씩 크게 보면 된다.

 

출처:  홍정모의 따라배우는 C언어

강의 외의 추가된 것들은 책 그리고 인터넷 조사해서 얻었음