int main() {
int a=1;
int b=1;
add(a,b);
int c=1;
int d=2;
add(c,d);
}
그럼 이 코드도 실행하면 a,b,add(a,b) 스택에 쌓였다가 다 없어지고
빈 스택에 c,d,add(c,d) 일케 쌓이는거임??
int main() {
int a=1;
int b=1;
add(a,b);
int c=1;
int d=2;
add(c,d);
}
그럼 이 코드도 실행하면 a,b,add(a,b) 스택에 쌓였다가 다 없어지고
빈 스택에 c,d,add(c,d) 일케 쌓이는거임??
ㅇㅅㅇ
a,b는 main 끝날때까지 남아있졍..
전방선언 안했을때 스택에 어케들어가는진 기억안난다 - dc Cpp
뭐 대충 push a push b push add pop add push c push d push add pop add겠지 - dc Cpp
add에서 다른함수 호출하면 또 push할테고 그런경우 스택에는 push add push func pop func pop add 순서겠지 - dc Cpp
a, b, c, d는 메인 끝나는 순간 역순으로 스택에서 빠지고 함수 콜은 들어갔다가 "나옴" 그러니까 둘이 아예 다른 문제야 물론 저 add함수 내에 지역변수가 있다면 그것들은 add함수 끝나는 시점에 역순으로 스택에서 나오지
물론 이건 논리상 그렇다는 것이고 컴파일러가 최적화를 어떻게 하느냐에 따라 내부적으로 보면 이렇게 안돌아갈 수 있음
그럼 변수로 선언해놓은건 걍 끝까지 남아있는거임?
잘 모르겠다면 사실 이게 항상 통용되는 것도 아니고 위험한 방법이기는 하지만 괄호로 묶인 곳에서만 그게 존재한다라고 생각하면 접근하기 쉬움 나중에 그게 아닌 경우를 알아도 큰 문제는 없을 거자