inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

14.10 복합 리터럴

14.10강 구조체 compound literal 질문 있습니다

356

realbrother98

작성한 질문수 11

1

구조체 compound literal이 메모리를 차지하고 있는 l-value라면 그냥 구조체를 선언하고 대입하는 것과 메모리적으로 차이가 없어 보입니다. 그럼에도 불구하고 이 용법을 쓰는 이유는 단지 타이핑을 적게 하기 때문인가요?

 

그리고 복합 리터럴이 메모리의 어느 공간에 저장이 되나요?

stack인가요 아니면 code segment인가요?

c

답변 1

2

강민철

좋은 질문 감사드립니다 :) 

compound literal은 struct 뿐 아니라 아래와 같이 scalar, array, union type 등에서도 사용될 수 있습니다.

int i = ++(int) { 1 };
const float *pc = (const float []){1e0, 1e1, 1e2}; 
int *p = (int[]){2, 4};

요는, "struct 표기를 대체하기 위해" 사용되기보다는, 보통 "이름없는 object를 내가 원하는 타입으로 임시 생성하고 싶을 때" 사용하지요.

compound literal이 어떤 세그먼트에 저장되는지는 compound literal을 선언하는 방식에 따라 다릅니다. 

보통, 함수 내부에서 정의되었을 경우 여느 리터럴과 마찬가지로 stack segment에 생성됩니다. 하지만 compound literal이 함수 외부에서 정의되었을 경우 (static) 이는 data segment에 생성됩니다.

참고하시면 좋은 링크도 함께 첨부해드립니다.

 

https://stackoverflow.com/questions/17890301/where-does-the-compound-string-literals-get-stored-in-the-memory

https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html

 

답변이 도움이 되셨길 바랍니다 :)

감사합니다.

Export template 안됨

1

65

2

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

91

3

main 함수에서 왜 int만 선언이 되는걸까요

1

80

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

75

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

78

1

프로토타입과 함수간의 인자 불일치

1

87

2

12.12 헤더 관련 질문

1

74

2

Visual Studio Community 2026 사용 문의

1

170

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

72

2

getchar(), putchar()

1

111

3

강의자리ㅛ

1

93

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

127

2

소스파일안에 여러 파일

1

87

2

F5와 F7의 차이

1

90

2

c = TWO * (a+b); 에서 a와 b는?

1

67

2

; 세미콜론을 붙이는 기준에 문의

1

78

1

Step over 기능 문의

1

64

2

2.6 강의 따옴표 출력 규칙 문의

1

87

2

int main 함수 관련 오류 문의

1

76

2

13.4 words[0]

0

73

2

11.7 함수를 구현해 봤습니다.

1

67

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

71

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

61

2

11.6 fit_str함수를 구현해 봤습니다.

1

59

2