반응형

1. auto와 static, extern의 용도 

auto: 자동범위 변수

일반적인 변수로 생성된 범위에서만 작동하고 벗어나면 메모리에서 소멸

일반적으로 auto keyword는 쓰지않음. (auto int a=20은 int a=20과 같은 의미이고, C++에서는 아예 오류를 발생시킨다. auto를 아예 다른걸로 바꿔버렸기 때문)

 

static: 정적변수

사용할 수 있는 범위는 변수로 생성된 범위 내부이나, 메모리에는 프로그램이 실행되는 동안 영구적으로 남아있음.

static int a;로 선언하고, 0으로 자동 초기화됨. 

 

extern: 외부 전역변수 가져오기

다른 파일에 선언되어 있는 전역변수를 가져와서 사용하는 방식.

extern a; 를 해주면 다른 파일에 전역변수로 선언되어있는 a를 그대로 가져와서 사용할 수 있다. 

 

2. 지역변수와 전역변수 

  저장 위치 사용 범위 메모리 저장 기간 초기화
지역변수 메모리 stack 영역 블록 내부 블록 내 안하면 쓰레기값 제일 무난함
전역변수 메모리 data 영역 만든 파일 내부
(extern쓰면 다른 파일 가능)
프로그램 종료까지 안하면 0으로  권장하지 않음. 

추가사항: 같은 이름의 지역변수와 전역변수가 있을경우 지역변수가 우선권을 가진다. 

3. 두개를 섞었을때 나오는 변수의 종류

지역변수 : 기본적인 지역변수

전역변수 : 기본적인 전역변수

static 지역변수 : static을 사용한 지역변수

static 전역변수 : static을 사용한 전역변수

전역변수 + extern :기본적인 전역변수가 다른파일에 extern

static 전역변수 + extern : static 전역변수가 다른 파일에 extern

(지역변수에는 extern이 붙을 수 없음)

  저장 위치 사용범위 메모리 저장기간 초기화
지역변수 메모리 stack 영역 블록 내부 블록 안  안하면 쓰레기값 제일 무난함
전역변수 메모리 data 영역 만든 파일 내부 프로그램 종료까지 안하면 0 권장하지 않음
static 지역변수 메모리 data 영역 블록 내부 프로그램 종료까지 안하면 0 전역변수 대체용
static 전역변수 메모리 data 영역 만든 파일 내부 프로그램 종료까지 안하면 0 이 파일만 쓰기
전역변수 +extern 메모리 data 영역 쓴 모든 파일 프로그램 종료까지 안하면 0 다른 파일도 사용
static 전역변수 
+ extern
메모리 data 영역 만든 파일 내부 프로그램 종료까지 안하면 0 extern이 막힌다. 

 

주의사항: 전역변수는 적을수록 좋은 프로그램이다. 가급적이면 전역변수 대신 static 지역변수, static 지역변수 대신 지역변수를 쓰려고 노력하자. 

반응형

'프로그래밍 구조' 카테고리의 다른 글

메모리 영역 (Rodata, bss등)  (0) 2021.11.28
2차원 배열과 pointer  (0) 2021.11.05
C언어 전처리기  (0) 2021.10.08
fgets 사용법, 주의점  (0) 2021.10.06
리눅스 명령어 정리(주요)  (0) 2021.09.22

+ Recent posts