전역 변수의 선언
(p.42)
프로그램을 작성하다 보면 여러 함수에서 공통으로 사용되는 변수가 필요한 경우가 있다. 이런 변수를 전역(global)변수라 하고 전역 변수를 정의할 때 extern이라는 명령어를 사용한다.
#include <stdio.h>
#define MAXLINE 1000
int max;
char line[MAXLINE];
char longest[MAXLINE];
int my_getline(void);
void copy(void);
int main(void)
{
int len;
extern int max;
extern char longest[];
max = 0;
while ((len = my_getline()) > 0)
if (len > max) {
max = len;
copy();
}
if (max > 0)
printf("%s", longest);
return 0;
}
int my_getline(void)
{
int c, i;
extern char line[];
for (i = 0; i < MAXLINE - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
line[i] = c;
if (c == '\n') { // 입력된 문자가 개행문자일 경우 문자열의 끝에 개행문자를 덧붙인다.
line[i] = c;
++i;
}
line[i] = '\0';
return i;
}
void copy(void)
{
int i;
extern char line[], longest[];
i = 0;
while ((longest[i] = line[i]) != '\0')
++i;
}
전역변수를 사용하는 함수가 전역변수 선언과 같은 파일에 들어 있는 경우에는 함수 내에서 extern 선언을 해 주지 않아도 된다. 그러므로 위 프로그램의 함수 내에 들어 있는 extern 선언들은 생략할 수 있다. 그런데 만약 copy 함수가 다른 파일에 있다면 copy 함수 내의 extern 선언은 꼭 있어야 한다.