자동 변수

Automatic variable

컴퓨터 프로그래밍에서 자동변수는 프로그램 흐름이 변수의 범위를 출입할 때 자동으로 할당 및 할당 해제되는 로컬 변수입니다.범위는 어휘 컨텍스트, 특히 변수가 정의되는 함수 또는 블록입니다.로컬 데이터는 일반적으로(대부분의 언어에서) 정의된 함수 또는 어휘적 맥락 밖에서 보이지 않습니다.로컬 데이터도 호출[note 1]함수에 대해 보이지 않고 액세스할 수 없지만 할당 해제되지 않으며 실행 스레드가 호출자에게 반환될 때 범위로 되돌아옵니다.

자동 로컬 변수는 주로 재귀적인 어휘 범위 [note 2]언어에 적용됩니다.자동 로컬 변수는 보통 [note 3]선언된 절차의 스택프레임으로 할당됩니다.이는 원래 재진입[note 4]재귀 허용을 위해 수행되었으며, 이는 오늘날에도 여전히 적용되는 고려 사항입니다.사전 스코프 언어의 재귀적( 중첩된) 함수의 자동 변수 개념은 1950년대 후반에 ALGOL과 함께 더 많은 독자들에게 소개되었고, 그 많은 후손들에 의해 더욱 대중화되었다.

local variable이라는 용어는 보통 자동 변수와 동의어입니다. 왜냐하면 이것들은 많은 프로그래밍 언어에서 같기 때문입니다.그러나 로컬 변수가 더 일반적입니다.대부분의 로컬 변수는 자동 로컬 변수이지만 정적 로컬 변수도 존재합니다.특히 C에는 정적 로컬 변수가 존재합니다.정적 로컬 변수의 경우 할당은 자동이 아닌 정적(라이프타임은 전체 프로그램 실행)이지만 함수의 실행 중에만 범위에 포함됩니다.

특정 프로그래밍 언어

C, C++

(자동 변수라고 불립니다).

코드 블록 내에서 선언된 모든 변수는 기본적으로 자동입니다.초기화되지 않은 자동 변수에는 해당 유형의 유효한 값이 할당될 때까지 정의되지 않은 값이 있습니다.[1] 스토리지 클래스 지정자auto이러한 변수 선언에도 추가할 수 있지만 기본적으로는 모두 자동이기 때문에 이 작업은 완전히 용장화되어 거의 수행되지 않습니다.

C에서 저장소 클래스 사용register는 변수를 프로세서레지스터에 캐시하기 위한 컴파일러에 대한 힌트입니다.주소 연산자(address-of-operator)를 허용하지 않는 것 이외에는&변수 또는 그 서브컴포넌트에 사용되는 컴파일러는 [2]힌트를 무시해도 됩니다.

C++에서는 자동변수의 생성자가 실행이 선언 위치에 도달하면 호출된다.소멸자는 지정된 프로그램 블록의 끝에 도달하면 호출됩니다(프로그램 블록은 중괄호로 둘러싸여 있습니다).이 기능은 파일을 열고 자동으로 닫거나 메모리를 비우는 등의 리소스 할당 및 할당 해제를 관리하는 데 자주 사용됩니다.자원 취득의 초기화(RAII)를 참조해 주세요.

C++11부터 C++에서는 변수를 선언할 수 있습니다.autotype specificate(유형 지정자)[3]는 변수 유형이 유추된 것을 의미하며 변수의 범위를 참조하지 않습니다.

자바

(로컬 변수라고 불립니다).

C 및 C++와 비슷하지만 없습니다.auto또는register키워드를 지정합니다.단, Java 컴파일러는 명시적으로 초기화되지 않은 로컬 변수를 사용할 수 없으며 컴파일 오류가 발생합니다(C 및 C++와는 달리 컴파일러는 보통 경고만 표시합니다).Java 표준에서는 [4]모든 로컬 변수를 사용하기 전에 명시적으로 초기화해야 합니다.이는 기본값(숫자와 객체용)으로 암묵적으로 초기화되는 인스턴스 변수와는 다릅니다.

(렉시컬 변수, 마이 변수 또는 프라이빗 변수라고 불립니다).

Perl에서는 로컬 변수는 다음 명령어를 사용하여 선언됩니다.my교환입니다.초기화되지 않은 스칼라의 값은 다음과 같습니다.undef; 초기화되지 않은 어레이 또는 해시는()를 클릭합니다.[5]

Perl은 또한local자동 [6]변수를 생성하지 않는 연산자 대신 글로벌(예:) 변수에 임시 값을 지정합니다. 이 값은 둘러싸인 블록에 동적으로 범위가 지정됩니다.변수의 범위가 남아 있으면 이전 값이 복원됩니다.

「 」를 참조해 주세요.

메모들

  1. ^ 로컬 데이터를 따라 정의되는 중첩된 함수가 아닌 경우
  2. ^ 그것들은 다소 비슷하지만 동일하지 않은 형태로 존재하지만, LISP의 오래된 변종과 같은 동적 범위를 가진 재귀 언어에도 존재한다.
  3. ^ 일부 언어에서 지정할 수 있는 정적 또는 힙 기반 데이터 등 달리 지정되지 않는 한
  4. ^ 재귀 또는 기타 루틴의 재진입 속성을 사용하는 경우 최적화 도구는 재진입이 중단되므로 프로세서레지스터에 이러한 변수를 할당하려고 해서는 안 됩니다.

레퍼런스

  1. ^ 현재 "C standard" (PDF).(3.61 MiB): 제6.2.4절 물건의 보관기간
  2. ^ "Storage Duration", cppreference.com
  3. ^ "Placeholder type specifiers", cppreference.com
  4. ^ "4.12.5 Initial Values of Variables". Sun Microsystems. Retrieved 2008-10-17.
  5. ^ "Private variables via my() - perlsub - perldoc.perl.org". Retrieved 2008-10-17.
  6. ^ "Temporary values via local() - perlsub - perldoc.perl.org". Retrieved 2011-02-25.