static 전역 변수

Language/C 2011. 8. 23. 10:34
C로 작성된 소스코드를 분석하는 도중 궁금한 점이 있습니다.
 
다음은 어떤 프로그램의 시작부분입니다.
 
#include<stdio.h>
#include<string.h>
 
#define MAXT 30
 
static int t;
static char tname[101];
static char name[MAXT][31];
static int statistic[MAXT][6];
static int tag[MAXT];
 
FILE *fin=fopen("input.txt", "r");
FILE *fout = fopen("output.txt", "w");
 
int getteam(const char *a)
{
int i;
for(i=0 ; i
{
if(strcmp(name[i], a) == 0)
return i;
}
 
return -1;
}
 
void input(void)
{
int i, j, g;
char name1[31],
.
.
.
.
.
 
시작부분에 전역변수를 선언한 부분(빨간색으로 된 부분)을 보면 static으로 선언했습니다. 제가 알기로는 static 은 함수안에 사용하여 함수가 종료된 이후에도 해당 값이 남아있도록 하는 역할을 하는 것으로 알고있습니다.
 
근데 전역변수야 프로그램이 종료될때까지 사라지지 않을테니 static을 사용해야 하는가 하는 의문이 드네요.
 
혹시 static의 다른 용도가 있어서 그런가요?
 
아니면 프로그래머의 습관인가요?



전역 변수에서의 static은 약간 다른 의미를 가지고 있습니다.

전역변수를 static으로 선언하면 해당하는 파일 내에서만 사용한다는
의미를 가지고 있습니다. 파일 하나만 사용하는 경우라면 별반 차이가
없지만 파일 여러 개를 가지고 프로그램을 개발할 때에는 문제가 생깁니다.

a.c라는 파일과 b.c라는 파일에 똑같이 전역변수를 정의할 경우 c.c 라는
파일에서 해당하는 전역변수를 사용하려 할 때 어느쪽을 사용해야 할 지
헷갈리게 됩니다. 아마도 링크 시에 에러가 나겠죠.

젼역변수를 static으로 정의하면 그 파일 내에서만 사용할 수 있으므로
외부에서는 변수에 접근을 못합니다. 개념상으로도 깔끔하고 무엇보다도
디버깅에 들어가는 노력을 엄청나게 줄여줍니다. 예를 들어 완전히
외부 모듈에 공개할 것만 일반적인 전역변수로 잡고 나머지 모듈 내에서
사용할 것을 모두 스태틱으로 선언을 하면 static 변수를 언놈이 바꿨는를
추적하기 위해 모든 소스를 뒤질 필요가 없습니다

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

[Linux/Unix]make 명령 코드 구현하기  (0) 2011.08.23
make (Makefile)  (1) 2011.08.23
gcc 컴파일 과정  (0) 2011.08.23
Pthread API Reference  (0) 2011.08.23
static 함수  (0) 2011.08.23
: