본문 바로가기
Study/ETC & TIP

static !!

by Answer Choi 2015. 3. 5.
반응형


C와 JAVA에는 둘다 static이 있습니다.


하지만 같은듯 하면서도 둘은 언어에 따라 완전 다른 역할을 합니다.


C에서의 static!!


C에서는 static을 선언하면, 선언한 함수나 선언한 C파일(*.C)에서만 사용가능하며, 


초기화는 처음 컴파일할때만 하게 됩니다.


즉, 정적이면서도, 지역변수가 되는 거지요.


예를 들어 아래의 함수가 있다고 한다면


  1. void ex(void)
  2. {
  3.     int a=0;
  4.     static int b=0;
  5.     a++;
  6.     b++;
  7.     printf("a=%d  b=%d\n",a,b);
  8. }
  9.  
  10. int main(void)
  11. {
  12.     while(1)
  13.     {
  14.         ex();
  15.     }
  16. }

a의 값은 계속해서 0으로 출력이 되지만, b의 값은 점점 증가할 것입니다.


또한 main에서는 저 b라는 변수에 접근을 할 수가 없습니다.


아래와 같이 전역에서 static으로 선언해야 같은 소스파일 내에서는 서로 접근 가능합니다.


  1. static int b=0;
  2.  
  3. void ex(void)
  4. {
  5.     int a=0;
  6.     a++;
  7.     b++;
  8.     printf("a=%d  b=%d\n",a,b);
  9. }
  10.  
  11. int main(void)
  12. {
  13.     while(1)
  14.     {
  15.         ex();
  16.         printf("again show b=%d\n",b);    
  17.     }
  18. }

하지만 다른 소스파일에서는 접근이 불가능하죠!!


다른 소스파일에서 접근하려면, static이 아닌 header파일에서 extern으로 선언해야 합니다.



이제 JAVA로 넘어오면, static은 좀 다른의미로 쓰입니다.


C와 JAVA 모두 static을 정적메모리에 올리는 건 같지만, JAVA에서는 extern의 의미도 포함합니다.


즉, JAVA에서는 한 소스파일에서 static으로 선언을 하면, 또다른 소스파일에서 접근이 가능합니다.



반응형

'Study > ETC & TIP' 카테고리의 다른 글

windows 10 upgrade 실패  (1) 2015.07.29
windows 10 업그레이드  (0) 2015.07.28
Wire Shark (network mornitoring)  (1) 2015.07.17
PPA  (0) 2015.02.12
Admob google play 버전  (0) 2015.02.12

인기글