C 언어 Design pattern - static

유명현·2022년 3월 28일

satic은 여러가지 쓰임새로 사용합니다.

1) 함수 내에서 정적 변수로 사용할 때
2) 하나의 파일내에서 전역 변수로 사용할 때
3) 동일 명칭의 변수, 함수를 여러 파일에서 쓰고자 할 때
4) extern으로 사용하지 않는 모든 함수

1) 함수 내에서 정적 변수로 사용할 때

uint8_t count_plus(void)
{
	static uint8_t count = 0;
    count++;
    return count; 
}

void main(void)
{
	while(1)
    {
    	printf("count = %d" , count_plus();
    }
}

위와 같이 함수를 작성한 경우 static으로 선언된 로컬변수는 초기화 하지 않고 호출 할 때마다 하나씩 증가한 값을 리턴합니다.

2) 하나의 파일내에서 전역 변수로 사용할 때

static uint8_t count = 0;
void main(void)
{
	while(1)
    {
    	pinrtf("count = %d", count++);
    }
}

위와 같이 작성한 경우 하나의 파일 내에서 어떠한 함수에 속하지 않고 전역변수로 선언했다면 일반 전역변수와 동일한 역할을 할 수 있습니다. 그러나 일반 전역변수와 차이점이 있다면, static으로 선언한 변수는 다른 파일에서 extern으로 접근할 수 없습니다.

3) 동일 명칭의 변수, 함수를 여러 파일에 쓰고자 할 때

4) extern으로 사용하지 않는 모든 함수 또는 변수

static void test_fucntion(void)
{
}

위와 같이 함수를 작성한 경우 다른파일에 똑같은 이름의 함수를 선언해도 에러나 경고가 발생하지 않습니다. 컴파일러에서 static으로 선언했을 경우 다른파일에서 같은 함수명과 변수명을 사용할 수 있게 만듭니다. 이유는 static으로 선언한 경우 다른파일에서 extern을 할 수 없으므로 같은 이름을 사용하지 못할 이유가 없기 때문입니다.

profile
기억보다 기록을

0개의 댓글