Programming Tools/TCPL C Language

[C Language] Chap.3 Control Flow - comma `,` 연산자

LiDARian 2021. 6. 11. 18:10
반응형

comma , 연산자

둘 이상의 문장을 한 행에 삽입할 때 사용된다.
,는 시퀀스 포인트를 추가하므로, 여러개의 문장을 하나의 문장으로 쓰되 각 문장을 시퀀스 포인트로 나눠주는 것이라고 생각할 수 있다.


콤마 연산자는 드물게 사용하는 것이 좋다. 그리고 사용시 두 연산자가 연관성이 있는 것이거나, 혹은 여러 단계를 거치는 연산이 한 행에서 행해지도록 하는 것을 목적으로 하는 것이 좋다.

 

둘 이상의 변수를 동시에 선언하거나, 둘 이상의 인자를 함수로 전달할 때에 사용하는 콤마 ,는 콤마 연산자가 아니다. 이 때의 ,는 왼쪽에서 오른쪽으로의 피연산자 평가를 보장하지 않는다.

 

왼쪽에서 오른쪽으로 평가되며, 오른쪽 피연산자의 type과 value가 반환된다.

#include <stdio.h>
int main() {
    int a=1, b=2, c, d, e;

    c = (a, b); //(a)
    d = a, b; //(b)
    e = (a, b, c); //(c)

    printf("c:%d\n", c);
    printf("d:%d\n", d);
    printf("e:%d\n", e);
}

출력
c:2
d:1
e:2



콤마 연산자의 사용예는 다음과 같다.

#include <stdio.h>

int main() {
    int i=1, j=2, k=3; // 콤마연산자

    printf("Before: i=%d, j=%d, k=%d \n", i,j,k); // 콤마연산자
    i=j, k=5; // 콤마연산자

    printf("After: i=%d, j=%d, k=%d \n", i,j,k);

    return 0;
}

for 문에서는 이렇게 사용할 수 있다. 두개의 index를 사용하는 것이다.

// reverse string s in place
#include <stdio.h>

int main() {
    char s[]= "asdf";
    int i, j, c;

    for(i = 0, j = strlen(s)-1; i < j; i++, j--){ // 콤마 연산자
        c = s[j], s[i] = s[j], s[j] = c; // 콤마 연산자
    }
}
반응형