04.06 - 스코프, 주기 및 링크 요약 (Scope, duration, and linkage summary)
스코프(scope), 주기(duration) 및 연결(linkage)에 대한 개념은 매우 혼란스러우므로 이 포스트에서 요약할 것이다.
Scope Summary
식별자(identifier)의 스코프(scope)에 따라 접근할 수 있는 위치가 결정된다. 스코프를 벗어난 식별자에 접근할 수 없다.
- 지역 스코프 / 블록 스코프 (local scope / block scope)에 있는 변수는 선언된 블록 내에서만 접근할 수 있다.
- 지역 변수 (local variable)
- 함수 매개 변수 (function parameter)
- 지역 정의 자료형 (Locally defined-type)
- 전역 스코프 / 파일 스코프 (global scope / file scope) 에 있는 변수와 함수는 소스 파일의 모든 위치에서 접근할 수 있다.
- 전역 변수 (global variable)
- 일반 함수 (normal function)
- 전역 정의 자료형 (Locally defined-function)
Duration Summary
변수의 주기(duration)는 변수가 생성되고 소멸하는 시기를 결정한다.
- 자동 주기(automatic duration)인 변수는 정의 지점에서 생성되며, 정의된 블록이 끝나면 소멸한다.
- 일반 지역 변수 (normal local variable)
- 정적 주기(static duration)인 변수는 프로그램이 시작될 때 생성되고, 프로그램이 종료하면 소멸한다.
- 전역 변수 (global variable)
- 정적 변수 (static variable)
- 동적 주기(dynamic duration)인 변수는 프로그래머의 요청에 의해 생성되고, 소멸한다.
- 동적으로 할당된 변수 (Dynamically allocated variables)
Linkage Summary
식별자(identifier)의 링크는 같은 이름의 여러 식별자가 같은 식별자를 참조하는지를 결정한다.
- 링크가 없는 식별자는 식별자가 자신만을 참조한다.
- 일반 지역 변수 (normal local variable)
- 블록 내에서 선언된 사용자 정의 자료형 (Ex. enum, typedef, class)
- 내부 링크가 있는 식별자는 선언 된 파일 내 어디에서나 접근 할 수 있다.
- 정적 전역 변수 (static global variable)
- 상수 전역 변수 (const global variable)
- 정적 함수 (static function)
- 외부 링크가 있는 식별자는 선언된 파일 내 어디에서나 접근할 수 있으며, 다른 파일에서도 접근할 수 있다.
- 일반 함수 (normal function)
- 비-상수 전역 변수 (non-const global variable)
- 외부 전역 변수 (extern global variable)
- 전역 스코프에서 선언된 사용자 정의 자료형 (Ex. enum, typedef, class)
요약 (Summary)
Variable scope, duration, and linkage summary:
Local variable |
int x; |
Block scope |
Automatic duration |
No linkage |
|
Static local variable |
static int s_x; |
Block scope |
Static duration |
No linkage |
|
Dynamic variable |
int *x = new int; |
Block scope |
Dynamic duration |
No linkage |
|
Function parameter |
void foo(int x) |
Block scope |
Automatic duration |
No linkage |
|
External non-const global variable |
int g_x; |
File scope |
Static duration |
External linkage |
Initialized or uninitialized |
Internal non-const global variable |
static int g_x; |
File scope |
Static duration |
Internal linkage |
Initialized or uninitialized |
Internal const global variable |
const int g_x(1); |
File scope |
Static duration |
Internal linkage |
Must be initialized |
External const global variable |
extern const int g_x(1); |
File scope |
Static duration |
External linkage |
Must be initialized |
전방 선언(forward declaration) summary:
Type |
Example |
Notes |
Function forward declaration |
void foo(int x); |
Prototype only, no function body |
Non-const global variable forward declaration |
extern int g_x; |
Must be uninitialized |
Const global variable forward declaration |
extern const int g_x; |
번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/4-3a-scope-duration-and-linkage-summary/ 입니다.