이번 글에서는 C 언어의 복합 리터럴(Compound Literal)에 대해 알아보겠습니다. 복합 리터럴은 C99 표준에서 새롭게 도입된 기능으로, 이름이 없는 익명 객체를 직접 생성할 수 있게 해줍니다.
복합 리터럴이란?
일반적으로 구조체 변수를 사용하려면 먼저 변수를 선언하고 초기화한 뒤 함수에 전달해야 합니다. 하지만 복합 리터럴을 사용하면 이러한 과정 없이 이름 없는 객체를 즉석에서 만들어 바로 사용할 수 있습니다. 문법은 다음과 같습니다.
(타입) { 초기화 값 }즉, 괄호 안에 원하는 자료형을 명시하고, 뒤따르는 중괄호에 초기화 값을 나열하는 방식입니다. 이렇게 생성된 객체는 해당 표현식이 속한 블록(scope) 내에서 유효합니다.
예제 코드
아래 예제는 복합 리터럴을 활용하여 이름 없는 구조체 객체를 생성하고, 이를 함수의 인자로 바로 전달하는 방법을 보여줍니다.
#include<stdio.h>
struct point {
int x;
int y;
};
void display_point(struct point pt) {
printf("(%d,%d)\n", pt.x, pt.y);
}
main() {
display_point((struct point) {10, 20});
}실행 결과
(10,20)
코드 설명
위 코드에서 핵심 부분은 (struct point) {10, 20} 입니다. 이 표현식은 x가 10, y가 20으로 초기화된 struct point 타입의 익명 객체를 생성합니다. 별도의 변수 선언 없이 display_point() 함수에 곧바로 인자로 전달되며, 실행 결과로 좌표 (10,20)이 출력됩니다.
복합 리터럴의 장점
- 간결성: 임시 변수를 선언하지 않고도 객체를 즉석에서 생성할 수 있어 코드가 간결해집니다.
- 가독성 향상: 값과 타입이 한눈에 드러나므로 의도를 파악하기 쉽습니다.
- 다양한 활용: 구조체뿐만 아니라 배열 등 다른 자료형에도 적용할 수 있으며, 포인터와 함께 사용하면 더욱 유용합니다.
복합 리터럴은 특히 구조체를 함수 인자로 자주 전달하거나, 일회성 데이터를 빠르게 구성해야 하는 상황에서 매우 편리하게 활용할 수 있는 C99의 강력한 기능입니다.