값 매개변수

값 매개변수 (Value parameters)

프로시저를 호출할 때 값을 전달하는 방식에는 여러 가지가 있어요. 그중 가장 기본적인 방식이 **값 매개변수(value parameter)**예요. 이 방식에서는 호출 시 넘긴 값의 복사본이 프로시저로 전달돼요.

출처: Free Pascal Reference - Value parameters

본문

값 매개변수는 다음과 같이 선언해요.

procedure 이름(매개변수 : 타입);

여기서 매개변수 : 타입으로 선언된 것이 값 매개변수예요.

매개변수가 값 매개변수로 선언되면, 프로시저는 호출문이 넘긴 매개변수들의 복사본을 받아요. 이 복사본에 가해지는 어떤 수정도 프로시저 블록 안에서만 국한되고, 호출한 쪽 블록으로는 전파되지 않아요.

값 매개변수로 프로시저를 호출하려는 블록은, 프로시저에 **할당 호환(assignment compatible)**되는 매개변수를 넘겨야 해요. 즉 타입이 정확히 일치할 필요는 없고, 실제 매개변수 타입으로 변환될 수만 있으면 돼요. 이 변환 코드는 컴파일러가 직접 삽입해요.

값 매개변수를 쓸 때는 주의할 점이 있어요. 값 매개변수는 특히 큰 매개변수를 쓸 때 스택을 많이 사용해요. 이식성을 위해 형식 매개변수 목록에 있는 모든 매개변수의 총 크기는 32K 미만이어야 해요(Intel 버전은 64K로 제한돼요).

개방 배열(open array)도 값 매개변수로 전달할 수 있어요. 개방 배열 사용에 대한 자세한 내용은 14.4.5절(759페이지)에서 다뤄요.

단순 타입(구조적 타입이 아닌 타입)의 매개변수에는 기본값을 지정할 수 있어요. 기본값은 타입이 없는 상수일 수 있어요. 함수 호출에서 해당 매개변수를 생략하면, 기본값이 함수에 전달돼요. 다만 동적 배열이나 포인터와 동등하게 취급될 수 있는 타입의 경우, 가능한 기본값은 오직 Nil뿐이에요.

다음 예시는 화면에 20을 출력해요.

program testp;

Const
  MyConst = 20;

Procedure MyRealFunc(I : Integer = MyConst);

begin
  Writeln('Function received : ',I);
end;

begin
  MyRealFunc;
end.

MyRealFunc를 인자 없이 호출했지만, 선언에서 지정한 기본값 MyConst(20)가 전달돼서 20이 출력되는 거예요.

더 알아보기

  • 값 매개변수는 호출 쪽에 영향을 주지 않아요. 값이 다시 나와야 한다면 변수 매개변수(14.4.2)를 써야 해요.
  • 개방 배열을 값으로 넘기는 방법은 14.4.5에서 자세히 다뤄요.