static 변수는 외부와 내부로 구분되어 진다.

static int b; //외부 정적변수
{
 static int a; //내부 정적변수
}

외부 정적변수와 내부 정적변수는 활동범위에 제약이 있다. 외부 정적변수는 자기가 속해 있는 모듈안에서만 사용할 때 사용한다. 모든 모듈에서 사용하고 싶을 땐 extern 키워드를 사용해야 한다. 내부 정적변수는 함수안에서 사용시 그 함수안에서만 사용이 가능하다. 즉 C++로 따졌을 때 class에서 private 변수로 사용하여 보호하는 것과 비슷한 맥락이다.

#include <stdio.h>
#include <stdlib.h>

void sub();

int main(int argc, char *argv[])
{
    int i;
    for(i = 0; i<3; i++)
    {
     sub();
     printf("main i : %d\n\n", i);         
    } 
  system("PAUSE");   
  return 0;
}

void sub()
{
     static int i=1;
     auto int k =3;
     printf("sub i : %d\t k : %d \t\n", i++,k++);
    
     }

다음은 틀리기 쉬운 기억클래스 예제이다. 결과값을 예측해볼것.

#include <stdio.h>
#include <stdlib.h>

void sub();

int reset(), next(int), last(int), now(int);
int i=1;


int main(int argc, char *argv[])
{
 auto int i,j;
 i = reset();
 
 for(j=0; j<3; j++)
 {
          printf("i = %d\t j = %d\n", i,j);
          printf("next(i) = %d\n", next(i));
          printf("last(i) = %d\n", last(i));
          printf("now(i+j) = %d\n\n", now(i+j));
          }
  system("PAUSE");   
  return 0;
}

int reset(){return(i);}
int next(int j){return (j=i++);}
int last(int j){
    static int i=10;
    return (j=i--);
    }
int now(int i)
{
    auto int j=10;
    return (i=j+=i);
   
    }

+ Recent posts