소년코딩

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;

cpp 번역: 이 포스트의 원문은 http://www.learncpp.com/cpp-tutorial/4-3a-scope-duration-and-linkage-summary/ 입니다.

댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기