전역 변수 (global variable)
정적 변수 (static variable)
내부 연결 (internal linkage)
파일 안에서 변수를 어디서든 사용할 수 있으면 내부연결
외부 연결 (external linkage)
한 cpp파일에서 정의한 변수를 다른 cpp파일에서 사용할 수 있는 것
전역변수는 가급적 사용하지 말아야 된다.
이 파일 저 파일 이동하면서 변수 사용하는 것은 좋지않다.
내부에서만 사용할 것인지 아니면 외부에서만 사용할 것인지를
결정하는 것이 내부 연결, 외부 연결이다.
지역변수와 전역 변수의 이름이 같을 때 지역 변수 대신
전역 변수를 사용하고 싶으면 변수명 앞에 :: 을 붙이면 된다.
정적 변수(static) 사용
프로그램 짤 때는 별로 사용하지 않지만,
디버깅할 때는 종종 사용함.
함수가 몇 번 호출하는지 알고 싶을 때 사용.
전역변수(global) 사용
정적 변수 vs 전역 변수
static 은 초기값을 반복하지 않는다.
static을 선언할 때는 반드시 초기값이 있어야 한다.
함수가 여러번 실행 될 때 두번째 실행시 첫번째에 저장된 값을 쓴다.
정적으로 같은 주소 메모리를 재사용한다.
같은 기능을 전역변수를 이용해서도 사용할 수 있음.
전역으로 선언되어있는 변수가 있고 그 이후 함수를 호출하면
다시 초기값을 선언하지 않기 때문에 static과 유사해 보인다.
전역변수는 위험해서 잘 사용하지 않음.
어디서든 변수 값을 바꿀 수 있기 때문에
관리가 안되고 추적하기 힘들어서 잘 사용하지 않게 된다.
제일 좋은 방식은 객체지향을 사용하여서 전역변수를 사용하지 않는 것이다.
linking 연결시킨다.
linkage 연결, 그 자체를 의미함
외부 연결(external linkage)
전역변수를 다른 파일에서도 사용할 수 있다.
extern 여러 cpp파일에 거쳐서 사용할 수 있는 전역변수
extern은 표기하지 않아도 됨.
main cpp 파일
extern void doSomething(); //어딘가에 doSomething의 몸체가 존재함을 표시.
링크 cpp 파일
전체적으로 사용되는 상수를 전역변수로 많이 사용함.
ex) 물리 값, 수치 값
*메모리를 덜 차지하게 하기위해서 주소값을 그대로 사용하는 const 정적 변수를 사용하고, 외부연결(extern)로 접근할 수 있도록 연결해 둔다.
주소 찍는 방법
&(함수명) :: (변수명)
ex) &doSomething :: a
전역변수가 internal linkage인 경우, 영역범위가 넓은 지역변수처럼 사용됨.
프로젝트가 커질 경우, 전역변수가 어디서 사용됐는지
알기 힘들기 때문에 단점이 많다.
여러개의 cpp파일이 공통적으로 사용할 수 있는 전역변수 external linkage
빌드할 때 obj파일이 생성되고 묶여지는 것과 연관됨.
'programming > c++' 카테고리의 다른 글
4.4 auto 키워드와 자료형 추론 (0) | 2019.04.25 |
---|---|
4.3 using문과 모호성 (0) | 2019.04.25 |
4.1 지역 변수, 범위, 지속기간 (0) | 2019.04.23 |
3.9 비트 플래그, 비트 마스크 (0) | 2019.04.22 |
3.8 비트단위 연산자 (0) | 2019.04.22 |