Inflearn Community Q&A
구조체는 전역변수 취급인가요?
Written on
·
783
2
CreatePlayer안에서
ret라는 변수를 만들고
뭔가 수작을 부리고 다시 리턴으로 돌려주는데
CreatePlayer에서 생성한 지역변수의 값이
EnterLobby의 지역변수값 안으로들어 간거잖아요
ret가 지역변수면 값이 전달이안될텐데 구조체와 구조체로 만든 모든 변수는 전역변수 취급이 되는건가요?
C++
Answer 1
4
Rookiss
Instructor
CreatePlayer에서 생성한 지역변수의 값이 EnterLobby의 지역변수값 안으로들어 간거잖아요
-> 이건 맞습니다.
구조체로 만든 모든 변수는 전역변수 취급이 되는건가요?
-> 물론 그건 아닙니다.
사실 정답은 질문에서 말씀주신 부분에 있는데,
지역변수의 [값]이 EnterLobby 지역변수 [값] 안으로 들어간 것입니다.
즉 복사가 일어나는 것이죠.
return ret을 할 때, 그 결과 값을 레지스터(eax)나 스택 어딘가에다가 임시 저장했다가,
그것을 EnterLobby 지역변수에 복사하게 됩니다.
참고로 요즘 컴파일러는 똑똑해서
복사 횟수를 최대한 줄이기 위해 CreatePlayer 쪽 스택프레임이 아니라,
막바로 EnterLobby 지역변수 안에다 다이렉트로 값을 쓰는 경우도 있습니다.




