반응형
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 |