1.10 외부변수
실습 전 이론
이전 챕터에서 만든 프로그램의 경우 main에 longest 등의 변수가 있었다.
이 변수들은 main 함수 내에서만 의미를 가진다.
같은 이름의 변수를 다른 함수에서 쓰더라도, 전혀 별개의 값이 된다. 이를 지역(local) 변수라고 한다.
여러 함수에서 공통으로 사용하는 함수를 공통 변수(global)라고 한다.
공통 변수를 정의할때는 extern 이라는 명령어를 사용한다.
해당 변수는 함수의 바깥에서도 정의하고, 그 변수를 사용하는 각 함수에서도 정의되어야 한다.
이전에 만든 가장 긴 행을 찾는 프로그램의 변수에서 longest와 max 그리고 line의 세 변수를 공통으로 사용하도록 프로그램을 고치면 다음과 같다.
실습
#include <stdio.h>
#define MAXLINE 1000
int max;
char line[MAXLINE];
char longest[MAXLINE];
int my_getline(void);
void copy(void);
int main()
{
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 명령어를 통해 외부에 있는 변수를 같이 사용하고 있다.
함수에 같이 전달하는 파라미터가 void로 변경이 된 것을 확인할 수 있다.
함수를 void로 선언한 copy의 경우 리턴 값이 없다는 뜻,
파라미터에 들어간 void는 " 이 함수는 파라미터를 절대 받지 않는다" 라는 뜻
실습 후 이론
프로그램을 작성할때 그럼 모든 변수를 공통으로 선언하면 편하지 않나 라는 생각이 들지도 모르지만,
프로그램 규모가 커지고 비슷한 변수들이 늘어나면 분리하는게 더 유용하지 않나 싶다. 장단점이 있는듯
1장은 여기서 마무리, 함수 관련하여 문제가 몇가지 있는데 이것들은 추후에 풀이를 같이 올려봐야겠다.
No comments to display
No comments to display