티스토리 뷰

Coding/C

static 및 extern // case01

빠리빵 2018. 5. 20. 11:46
// 티스토리가 처음이라 코드를 올리는 과정에 이상하게 올라가진다.. 급하게 소스코드 에디터를 야매로 설치한 탓에 발생한 현상 같다. HTML 특징 같은데.. <stdio.h> 를 넣으면 </stdio.h> 가 자동 추가되는..? 나중에 고쳐야겠다. 혹시나 보시는 분이 계시다면 잡다한 오류는 무시해주세요!

// 나를 위한 메모 : <pre class="brush:cpp"> </pre> 사이에 코드를 넣을 것

extern은 다른 파일의 변수나 함수를 참조하기 위해 사용한다.
static은 한 파일에서 전역변수로 쓰지만, 다른 파일의 참조를 막고 싶은 경우에 사용한다.

Exam01.cpp
#include 

int a; // 전역변수는 static이 자동으로 선언되며 static은 초기화를 안해도 0의 값이 들어간다. 
static int b = 10;
extern int c;
extern void func();

void main(void) {
	func();

	c++;  // 4. Exam02의 int c를 가리키며, 값은 31 -> 32로 변경
	a++;  // 5. Exam01의 int a를 가리키며, 값은 1 -> 2로 변경
	b++;  // 6. Exam01의 static int b를 가리키며, 값은 10 -> 11로 변경

	printf("a = %d\n", a);
	printf("b = %d\n", b);
	printf("c=%d\n", c);

	system("pause");
}




Exam02.cpp
#include 
extern int a;    // a는 Exam01.cpp의 전역변수를 사용하겠다.
static int b = 20; // static이 붙으면 현 파일에서 전역변수로 사용하지만, 외부의 참조를 막는다.
int c = 30;

void func(void) {
	a++; //  1. Exam01의 int a을 가리키며, 값은 0 -> 1로 변경
	b++; //  2. Exam02의 static int b을 가리키며, 값은 20 -> 21로 변경
	c++; //  3. Exam02의 int c를 가리키며, 값은 30 -> 31로 변경 

	printf("a=%d\n", a);
	printf("b=%d\n", b);
	printf("c=%d\n", c);
}


출력

a=1

b=21

c=31

a=2

b=11

c=32


static과 extern이 막 있다면 정확히 어떤 변수를 가리키는지 확인해야겠다.


Exam01에 extern int c가 있지만, Exam02의 int c = 30; 앞에 static을 붙이게 되면 외부 참조를 막기 때문에 컴파일이 되지 않는 점을 주의하자.


static이 각각의 파일에 있고, 변수가 같은 이름이라면 b의 사례와 같이 자신의 변수를 가리킨다.



'Coding > C' 카테고리의 다른 글

little endian과 big endian  (0) 2018.05.22
포인터의 연산  (0) 2018.05.22
pointer 와 선치, 후치 연산자  (0) 2018.05.20
static 및 extern // case03  (0) 2018.05.20
static 및 extern // case02  (0) 2018.05.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함