인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

Windfall's profile image
Windfall

asked

[MMORPG Game Development Series with C++ and Unreal] Part 1: Introduction to C++ Programming

Pointer Practice

구조체는 전역변수 취급인가요?

Written on

·

740

2

CreatePlayer안에서

ret라는 변수를 만들고

뭔가 수작을 부리고 다시 리턴으로 돌려주는데

CreatePlayer에서 생성한 지역변수의 값이

EnterLobby의 지역변수값 안으로들어 간거잖아요

ret가 지역변수면 값이 전달이안될텐데 구조체와 구조체로 만든 모든 변수는  전역변수 취급이 되는건가요?

C++

Answer 1

4

rookiss님의 프로필 이미지
rookiss
Instructor

CreatePlayer에서 생성한 지역변수의 값이 EnterLobby의 지역변수값 안으로들어 간거잖아요

-> 이건 맞습니다.

구조체로 만든 모든 변수는  전역변수 취급이 되는건가요?

-> 물론 그건 아닙니다.

사실 정답은 질문에서 말씀주신 부분에 있는데,
지역변수의 [값]이 EnterLobby 지역변수 [값] 안으로 들어간 것입니다.
즉 복사가 일어나는 것이죠.
return ret을 할 때, 그 결과 값을 레지스터(eax)나 스택 어딘가에다가 임시 저장했다가,
그것을 EnterLobby 지역변수에 복사하게 됩니다.

참고로 요즘 컴파일러는 똑똑해서
복사 횟수를 최대한 줄이기 위해 CreatePlayer 쪽 스택프레임이 아니라,
막바로 EnterLobby 지역변수 안에다  다이렉트로 값을 쓰는 경우도 있습니다.

Windfall's profile image
Windfall

asked

Ask a question