5.6.4 복합 리터럴

    상수를 표현하는 리터럴이 없는 타입은 상황이 좀 복잡하다. 이런 타입은 매크로에서 교체할 텍스트를 적는 부분을 복합 리터럴(compound literal)C로 지정해야 한다. 복합 리터럴은 다음과 같이 소괄호 안에 타입을 적고 나서 초기자를 적는다.

    (T) { INIT }

    예를 들면 다음과 같다.

    # define CORVID_NAME /**/        \
    (char const*const[corvid_num]){  \
      [chough] = "chough",           \
      [raven]  = "raven",            \
      [magpie] = "magpie",           \
      [jay]    = "jay",              \
    }

    이렇게 하면 앞의 예제에서 for 루프를 작성할 때 bird 배열 대신 방금 정의한 CORVID_NAME 매크로를 넣을 수 있다.

    for (unsigned i = 0; i < corvid_num; ++i)
        printf("Corvid %u is the %s\n", i, CORVID_NAME[i]);

    매크로를 정의할 때 복합 리터럴을 사용하면 지정한 타입의 상수처럼 작동하도록 선언할 수 있지만, 엄밀히 말해서 C 언어의 상수는 아니다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.