C: 이름없는 임시 변수 만들기

프로그래밍을 하다보면 때때로 임시 변수가 필요할 때가 있다. 특히 어떤 함수를 호출할 때 어쩔 수 없이 넘겨야 하는 포인터 인자 때문에 변수가 필요한 경우가 있다.

예를 들어, 어떤 디스크립터가 소켓인지 아닌지 판단하기 위해 getsockopt() 를 쓰는 경우가 있다. getsockopt() 의 원형은 다음과 같다.

int getsockopt(int socket, int level, int optname,
       void *optval,
socklen_t *optlen);

소켓 여부를 판단하기 위해서는 socket 과 level 그리고 optname이 필요하지만, optval 이나 optlen 은 실질적으로 필요하지 않다. 일반적인 경우라면 다음과 같은 형태의 코드가 펼쳐질 것이다.

1
2
3
4
5
6
7
8
9
10
{
    int sock;
    int optval = 0;
    int optlen = sizeof( optval );

    if( getsockopt( sock, SOL_SOCKET, SO_TYPE, &optval, &optlen ) == ENOTSOCK )
    {
        /* Not a socket */
    }
}


하지만 optval 이나 optlen 은 일회성 변수이므로, 다음과 같이 쓸 수 있다.

1
2
3
4
5
6
7
8
{
    int sock;

    if( getsockopt( sock, SOL_SOCKET, SO_TYPE, &( int ){ 0 }, &( int ){ sizeofint )}) == ENOTSOCK )
    {
        /* Not a socket */
    }
}


이러한 문법은 C99 이후에 지원되는 것으로 compound literals 라 불린다. C99 을 지원하는 컴파일러라면 일회성 임시 변수대신에 compound literals 를 사용하는 것이 더 편할 것 같다.

물론 compound literals 의 용도는 더 다양하다. 이에 대한 자세한 내용은 다음 링크를 참조하기 바란다.


댓글

이 블로그의 인기 게시물

토렌트: < 왕좌의 게임 > 시즌 1 ~ 시즌 8 완결편 마그넷

토렌트: < 스타워즈 > Ep.1 ~ Ep.6 마그넷

토렌트: NGC < 코스모스 > 우리말 더빙 전편(1편~13편) 마그넷