변수의 영역과 연결상태(linkage), 객체의 지속기간

예제 위주로 살펴보겠다.

먼저.. 변수의 visibility라는 성질에 대해 간략하게 설명해주겠다. 영역 A에서 선언된 변수x를 다른 영역 B에서는 사용불가능한 현상을 두고, B에서 A의 변수 x가 invisible하다고 표현함. 이런 성질을 변수의 visibility라는 단어로 표현.

변수가 정의될 수 있는 영역에는 4가지가 있다.

  1. block (특정{})
  2. function (함수 바디)
  3. function prototype (함수 선언부)
  4. file

file영역이란건, main포함해 모든 함수의 바깥쪽 영역을 말함.

이때 그 변수를 file scope를 갖는다고 하고, 전역변수라고 번역함. 전역변수는 그 소스코드파일에 어디에서도 사용가능함.

file scope의 변수가 왜 전역변수라고 불리는지는 linkage와 같이 봐야한다.

int g_i = 123; //file scope
int g_j; //file scope

void func1()
{
	g_i++;
}

void func2()
{
	g_i += 2;
}

int main()
{
	int local = 1234;

	func1();
	func2();

	printf("%d\\n", g_i);
	printf("%d\\n", g_j);
	printf("%d\\n", local);

	return 0;
}

파일스코프를 갖는 g_i, g_j는 함수 어디에서나 사용가능하다.

function prototype scope의 변수

void f1(int hello, double world); // to the end of the prototype declaration
// void vla_param(int n, int m, double ar[n][m]); // gcc only

이때 변수 hello와 world의 duration은 prototype이 끝나는 ;까지이다…. 그래서 사실상 저 이름들은 없어도 된다.