인프런 커뮤니티 질문&답변

Windfall님의 프로필 이미지
Windfall

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

포인터 실습

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

작성

·

703

2

CreatePlayer안에서

ret라는 변수를 만들고

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

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

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

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

답변 1

4

Rookiss님의 프로필 이미지
Rookiss
지식공유자

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

-> 이건 맞습니다.

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

-> 물론 그건 아닙니다.

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

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

Windfall님의 프로필 이미지
Windfall

작성한 질문수

질문하기