티스토리 뷰
C언어 extern 변수와 static 변수의 차이점 그리고 함수는?
처음 C프로그래밍을 배우다 보면 extern, static 변수와 함수의 사용에 있어서 어떤 때는 extern을 써야하고 어떤 때는 static을 써야하는지 좀 헷갈립니다. 그래서 오늘은 전역(extern)과 지역(static) 변수와 함수에 대해 이야기를 해볼까 합니다.
정말 어처구니 없는사무실 책상.... 헐.....ㅡ..ㅡ;;;;;
전역변수와 지역변수
c언어에서 함수안에서 선언된 변수를 지역 변수라고 부릅니다. 이를 지역변수라고 부르는 이유는 이 변수가 선언된 함수 안에서만 값을 참조하거나 변경할 수 있기에 그렇습니다. 그러면 여러 함수들이 공통으로 쓸 수 있는 변수도 있을텐데요. 그게 바로 전역(extern) 변수입니다. 전역 변수로 선언 하는 방법은 함수 밖에서 선언을 하면 되고요. 그러면 여러 함수들에서 그 변수의 값을 참조하고 변경할 수 있습니다. 그런데 만약 여러개의 파일로 이루어진 프로그램에서 다른 코드파일에 선언된 전역변수를 참조하려면 어떻게 해야할까요?
extern과 static의 차이
extern으로 변수를 선언하면 다른 파일에서 그 변수를 사용할 수 있습니다. 가령 A파일에서 int temp = 0; 라고 선언한 뒤 B파일에서 extern int temp; 라고 참조 선언을 하면 B파일의 어느 곳에서든 temp 전역변수에 대한 접근과 변경이 가능합니다. 전역변수는 기본으로 extern이기 때문에 A파일의 int temp = 0; 선언은 extern int temp = 0;와 동일합니다. 이렇게 함으로써 extern 전역변수에 대한 정의와 초기화가 된 것입니다. 초기화가 없는 B 파일의 extern int temp; 선언은 '참조선언'으로서 다른 파일에서 전역변수를 찾아서 있으면 그것을 가져다 쓰겠다는 의미로 봅니다.
이렇게 extern 전역변수를 선언하여 여러 파일에서 쓰다보면 한 파일내에서만 쓰고 싶은 전역 변수도 생길 것입니다. 그러한 경우에 쓰는 것이 static 전역변수입니다. 선언 방법은 static int temp;와 같이 쓰면 되고요. 정리하자면 여러 파일에서 공유해서 쓰고자 할 경우에는 extern, 한 파일내에서만 쓰고 싶은 경우는 static 입니다. 함수도 마찬가지고요.
추가
extern 함수 : 기본적으로 함수는 extern으로 선언됩니다. 만약 다른 파일에서 동일한 함수 이름을 쓰면 재정의 오류란 녀석이 떵!!!~ 하고 나타나죠.
extern 함수 : extern 참조 선언을 함수 밖이 아닌 함수 내에서도 할 수 있는데요. 그럴 경우에는 컴파일러가 다른 파일에서 해당 extern 변수가 선언이 되어 있는지 아닌지
검사하지 않으므로 컴파일시에 에러가 나지 않습니다. 고로 주의해서 사용해야 합니다. 선언되어있지도 않은 변수를 쓰면 어떤일이 발생할지 아무도 모르죠.
'잉고래의 코딩' 카테고리의 다른 글
c프로그래밍 : sizeof()가 함수일까? 아닐까? (0) | 2013.12.15 |
---|---|
c언어 포인터 변수, 역참조 연산자, 주소 연산자에 대한 정리 (0) | 2013.12.15 |
make menuconfig 혹은 Kconfig 에러 (0) | 2013.10.21 |
예전 코드 삭제해야 할까? 코멘트 처리 해서 남겨둬야 할까? (2) | 2013.10.18 |
닥시스(DOCSIS) 이해 (0) | 2013.08.05 |
- Total
- Today
- Yesterday
- 한빛미디어
- 소니 캠코더
- 티스토리
- 독후감
- AXP35
- 독서
- SM5
- 아이나비
- 아이나비 탭 xd9
- 서평
- 블로그
- 캠코더
- 소니
- 아이나비 탭 XD11 Pro
- 아이나비 Tab XD9
- 소니 AXP35
- HP Pavilion x2
- 팅크웨어
- 아이나비 태블릿
- 파빌리온 X2
- Sony
- 블랙박스
- 박근혜
- 아이나비 패드
- 소니 핸디캠
- cc2530
- c언어
- CSS
- qxd1000a
- X1 DASH
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |