반응형
Local Variable(지역변수)
- 함수 안에서만 사용, 함수에서 선언되고 초기화되며 삭제됨
- 다른 파일에서 참조할 일이 없으므로, Linkage가 필요 없음
- Stack Segment 에 저장됨
Global Variable(전역 변수)
- 프로젝트 전체에서 사용, 프로그램이 종료 될때까지 존재함
- 가급적이면 사용을 권장하지 않음
- Data Segment에 저장됨
- 장점 : 간단한 코드를 작성할때는 유용함
- 단점 : 여러곳에서 초기화 할 수 있기때문에, 이도 저도 못하는 상황이 올 수 있음, 디버깅이 어려워짐
주의
- 변수 선언과 정의를 따로 분리 하지 않고, 헤더파일에 선언과 동시 초기화를 하게 되면 문제가 발생함, 하나의 전역 변수(constexpr, 상수)를 여러 .c 파일에서 사용할 경우, .c 파일 개수 만큼 각기 다른 메모리주소를 갖고있는 전역변수가 생김
ex1)static const int 전역 변수를 선언한뒤, 각기 다른 .c 파일에서 참조하도록함
3개의 함수에서 같은 이름의 전역변수 주소를 확인 했을때 각각 다른 주소를 보임,
올바른 방식의 전역변수 선언 및 정의
헤더파일에 선언만 하고, .c 파일에 선언및 정의를 넣어주면 된다
결과
Static Local Variable(정적 지역 변수)
- 선언된 함수에서만 사용, 외부에서 접근 불가능
- 오직 하나만 존재하는 변수
- 선언과 동시에 반드시 초기화가 이뤄져야함 그리고 한번만 하게됨
- 함수내에 static 변수를 선언과 동시 초기화를 하면, 나중에 다시 함수를 호출했을때, 초기화를 반복 하지 않음
- Data Segment에 저장됨
Static Global Variable(정적 전역 변수)
- 파일( *.c )안에서만 사용, 파일 외부에서 접근 불가능
- 반드시 헤더 파일이 아닌, .c파일에서 선언및 초기화를 해야함
- 오직 하나만 존재하는 변수
- Data Segment에 저장됨
반응형
'C' 카테고리의 다른 글
memset, memcpy, memmove (0) | 2020.03.13 |
---|---|
expression(표현식) (0) | 2020.03.12 |
fseek, ftell, 파일 크기 알아내기 (0) | 2020.02.25 |
FileStream Input Output (0) | 2020.02.22 |