스택큐힙리스트

정적 변수를 함수 내에서 extern으로 선언하는 것의 용도는 무엇인가요? 본문

카테고리 없음

정적 변수를 함수 내에서 extern으로 선언하는 것의 용도는 무엇인가요?

스택큐힙리스트 2023. 11. 18. 00:19
반응형

#include <stdio.h>
static int i = 5;
int main()
{
extern int i;
printf(%d\n,i);
return 0;
}

어떤 사람은 함수 블록 내에서 정적 변수를 extern으로 선언하는 경우에 대한 사용 사례를 제시할 수 있을까요?


새로운 질문: 왜 이것은 허용되지 않는 걸까요?


int main()
{
static int i = 5;
extern int i;
printf(%d\n,i);
return 0;
}

답변 1


6.2.2 식별자의 연결성


섹션 3:


파일 범위 식별자에 대한 객체나 함수의 선언에 static 저장 클래스 지정자가 포함되어 있는 경우, 해당 식별자는 내부 연결성을 갖습니다.


섹션 4:


이전에 선언된 해당 식별자가 가시적인 범위에서 extern 저장 클래스 지정자로 선언된 경우, 이전 선언에서 내부 또는 외부 연결성이 지정된 경우, 나중에 선언된 식별자의 연결성은 이전 선언에서 지정된 연결성과 동일합니다. 이전 선언이 보이지 않거나, 이전 선언에서 연결성이 지정되지 않은 경우, 식별자는 외부 연결성을 갖습니다.



따라서, static은 내부 연결성을 유발하므로, extern은 해당 연결성을 현재 범위로 가져올 것입니다. 또한, 변수의 숨김이 발생할 수 있는 것을 설명하는 각주도 있습니다:


23) 6.2.1에서 명시된 대로, 나중에 선언된 것이 이전의 선언을 숨길 수 있습니다.


답변 2

정적 변수를 함수 내부에서 extern으로 선언하는 것의 사용 용도는 무엇일까요?
정적 변수(Static variable)는 프로그램 실행 동안 지속되는 특성을 가지고 있습니다. 이러한 변수는 선언된 함수 내부에서만 사용할 수 있으며, 함수를 호출할 때마다 초기화되지 않고 이전 값이 유지됩니다.
그러나 때로는 한 함수에서 선언된 정적 변수의 값을 다른 함수에서도 사용하고자 할 때가 있을 수 있습니다. 이때 extern 키워드를 사용하여, 함수 내에서 선언된 정적 변수를 다른 함수에서도 참조할 수 있게 됩니다.
extern으로 선언된 정적 변수는 해당 파일 내에서 전역적으로 공유되는 변수입니다. 이는 다른 함수에서도 extern으로 선언된 해당 변수를 사용할 수 있음을 의미합니다. 함수 내부에서 extern 키워드를 사용하여 선언된 정적 변수는 함수 외부에서도 접근할 수 있는 전역 변수로 간주됩니다.
이러한 사용 용도는 프로그램의 구조를 개선하고 코드의 재사용성을 높이는 데 도움이 됩니다. 다른 함수에서도 사용해야 하는 변수를 정적 변수로 선언한 후, extern을 사용하여 함수 외부에서도 참조할 수 있도록 함으로써, 코드를 모듈화할 수 있습니다. 이렇게 하면 해당 변수의 값을 함수 간에 공유하면서도 전역적 변수 사용에 따르는 부작용을 방지할 수 있습니다.
정리하자면, 함수 내부에서 extern으로 선언된 정적 변수의 사용 용도는 다른 함수에서도 해당 변수의 값을 참조하고 싶을 때입니다. 이러한 방식은 모듈화된 코드 구조를 만들고 코드의 재사용성을 높이는 데 도움을 줍니다. 함수 내부에서 선언된 정적 변수를 extern으로 선언함으로써, 전역 변수 사용을 최소화하면서도 변수 값을 여러 함수에서 공유할 수 있게 됩니다.

반응형
Comments