맨위로

C PROGRAMMING - 기초2012. 6. 7. 18:15

안녕하세요 ? 이번 강의에서는 C언어 외부변수에 대해서 알아보도록 하겠습니다. 이번글도 다른글과 마찬가지로 간단한 프로그램 소스코드를 보고 외부변수에 대해서 알아보도록 하겠습니다. 먼저 강의를 시작하기 전에 이블로그에 와주신 모든 분들께 감사의 말씀드립니다. 

외부변수


이번 강의에서 살펴본 프로그램 코드는 문자배열 에서 살펴 보았던 소스코드입니다. 

#include stdio.h>

#define MAXLINE 1000

int getline(char line[], int maxline);

void copy(char to[], char from[]);

main()

{

      int len;

      int max;

      char line[MAXLINE];

      char longest[MAXLINE];

      max = 0;

      while ((len = getline(line,MAXLINE)) >0)

      if (len > max){

              max = len;

              copy(longest, line);

              }

              if (max > 0 )

              printf("%s",longest);

              return 0;

}

int getline(char s [],int lim)

{

    int c, i;

    for(i = 0; i<lim-1 && (c=getchar()) !=EOF && c!='\n'; ++i)

    s[i] = c;

    if (c == '\n'){

          s[i] = c;

          ++i;

          }

          s[i] = '\0';

          return i;

}

void copy(char to[],char from[])

{

     int i;

     i = 0;

     while ( (to[i] = from[i] ) != '\0')

     ++i;

}

 이 프로그램 소스코드를 보면 main함수에 있는 longest 외의 변수들이 있는데 이변수들은 main 함수내에서만 의미를 같게 된다. 

ㅁㅁㅁㅁ<함수 中>

이것은 지난번강의 함수에서 설명한적이 있던것입니다. 이런변수를 지역변수라고 부르는데 우리는 이런 지역변수말고 공통적으로 쓰일수 있는 변수(함수내에서의 의미와 main 함수내에서의 의미가 같은) 를 필요로합니다. 이런 변수를 오늘 배우는것인 외부변수 이며 공통변수 라고도 합니다. 이변수의 특징은 다음과 같습니다.

  • 이 외부변수(공통 변수)는 함수의 바깥에 정의해야합니다.

  • 이 변수를 사용하는 각 함수에도 외부변수(공통 변수)가 정의되어야 합니다.

  • 선언을 할때에는 extern이라는 명령어를 사용합니다.

만약 위의 소스코드에 있는 변수인 longest , max , line 변수를 공통으로 사용하도록 외부 변수로 선언 한다면 다음 과 같이 소스코드를 작성할수 있습니다.

#include<stdio.h>

#define MAXLINE 1000

int max;

char line[MAXLINE];

char longest[MAXLINE];

위의 공통변수를 이용해서 프로그램을 작성하면 다음과 같이 작성할수 있습니다. 살펴볼 부분은 다른 색으로 표시 했습니다.

(소스코드중에 오타가 있을수 있습니다.)

#include<stdio.h>

#define MAXLINE 1000

int max;

char line[MAXLINE];

char longest[MAXLINE];


int getline(void);

void copy(void);


main()

{

      int len;

      extern int max;

      extern char longest[];

      

      max = 0;

      while((len = getline())>0)

      if (len > max){

              max = len;

              copy();

              }

      if(max > 0)

      printf("%s",longest);

      return0;

}

int 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은 생략하고 선언할수 있다. 하지만 공통변수와 공통변수를 사용하는 함수가 다른 곳에

있다면(다른 파일에 있다면) 반드시 extern 을 사용해서 공통변수를 선언해야 한다. 

위의 프로그램에서 void 부분도 살펴보아야 하는 부분이지만 지금은 살펴보지 않고 나중에 살펴보도록 하겠습니다.

프로그램을 작성하다보면 외부변수가 필요할때가 있습니다. 필요할때 외부변수를 사용하면 옳바른것이지만 모든 변

수를 공통변수로 선언한다면 그건 결코 옳바른것이 아닙니다. 




'C PROGRAMMING - 기초' 카테고리의 다른 글

C언어 - 제어흐름  (0) 2012.09.23
C언어 - 자료형(Data Type)과 변수,연산자,수식 그리고 상수  (1) 2012.08.25
C언어 - 외부변수  (0) 2012.06.07
C언어 - 문자 배열  (0) 2012.05.26
C언어 - 매개변수값 전달  (0) 2012.04.22
C언어 - 함수  (0) 2012.04.21

Posted by STIH

댓글을 달아 주세요