------- 1.c
#include <stdio.h>
int a; // a를 선언
void sam(); // 함수 선언
void main()
{
a = 10;
printf("%d", a);
sam();
printf("%d", a); // 10이 출력? 20이 출력?
}
-------- 2.c
int a;
void sam()
{
a = 20;
}
위와 같은 분할 컴파일의 경우 변수 a가 중복되기 때문에 에러가 발생한다.
그렇다고 2.c 에 외부 변수가 없다면 또한 에러가 발생한다.
두 파일에서 같은 변수로 인식을 하고 싶다면 extern int a; 라고 선언을 해주면 된다.
하지만 비주얼 C 에서는 없어도 알아서 extern을 붙여서 프로그램이 이상없이 돌아간다.
그렇지만 붙여주는 습관을 들여라~
extern int a;
void sam()
{
a = 20;
}
- static 변수
1. static storage duration을 갖는다.
2. scope의 영향을 받는다.
- 전역 변수 : file scope의 영향을 받으며 internal linkage라고 한다.
- 지역 변수 : block scope의 영향을 받는다.
- 클래스 멤버 변수 : 클래스 이름공간의 영향을 받는 전역 객체이다.
static 함수
1. 일반 함수 : internal linkage를 갖는다. 즉, 외부 파일에서 해당 함수를 호출하지 못한다.
2. 클래스 멤버 함수 : this 포인터를 갖지 않는다. 따라서 객체의 멤버 변수나 멤버 함수를 직접 참조/호출할 수 없다. 단, 같은 클래스의 static 멤버 변수나 static 멤버 함수는 직접 참조/호출이 가능하다.
-포인트-
C에서 static의 의미는 C++에서 private의 역할을 한다.
즉, 다른 파일에서 접근이 불가하며, 정적으로 공간을 잡는다.
'프로그래머의 길 > C & C++' 카테고리의 다른 글
2차원 배열 처럼 사용할 수 있는 배열과 포인터형 배열의 조합 (0) | 2007.03.12 |
---|---|
2차원 배열 매개변수로 받는 방법 (0) | 2007.03.09 |
초보자들이 실수하는 getchar() 바로 알기 (0) | 2007.03.07 |
고수준 파일 입출력 함수 정리 (0) | 2007.03.07 |
문자열 조작 함수 (0) | 2007.03.06 |