프로그래밍언어론 - 부프로그램
부프로그램이란, 프로그램에서 호출에 의해 실행되도록 만들어진 일련의 코드를 의미한다
부프로그램의 정의와 호출
부프로그램은 실행 할 내용을 기술한 일련의 코드로 머리부와 본체로 구성 되었다
부 프로그램은 코드 흐름 상, 순차적으로 실행 되던 중 함수, 프로시져 등 프로그램 흐름을 변경해서 기능하는 것들을 일컫는 것이라 이해했다
부프로그램의 머리 부분은 예약어, 부프로그램의 이름, 매개변수들의 이름과 타입, 반환 값의 타입 등을 기술한다
부프로그램의 정의 방법
부프로그램 선언
- 부프로그램이 정의되어 있다는 것을 컴파일러에게 알리는 역할
- 부프로그램의 머리부는 제공하지만, 부프로그램 몸체를 포함하진 않음
void sub(int, int);
부 프로그램 호출
- FORTRAN에서 SUB 부프로그램을 호출하는 예
CALL SUB(I, J)
- Pascal과 C에서 sub1 부프로그램을 호출하는 예
sub(i,j)
호출 프로그램에서 부프로그램에게 어떤 정보(인자)를 전달
- 실 매개 변수 : 호출 문장의 매개변수 i 와 j
- 형식 매개 변수 : 부 프로그램의 정의 머리부의 매개변수 x와 y
위치 매개변수 방법
- 위치에 따라 형식 매개변수와 실 매개 변수를 대응하는 방법
키워드 매개 변수 방법
- 호출 문장에서 실 매개변수와 대응되는 형식 매개 변수의 이름을 지정할 수 있는 방법
procedure sub(koreanScore, mathScore, engScore: integer) is begin ⋮ end sub;
- 호출 문자
sub(i=>mathScore, j=>engScore, k=>koreanScore);
Ada는 위치 매개변수 방법과 키워드 매개변수 방법을 혼합해서 사용 된다
- 위치 매개변수 방법을 적용한 i는 koreanScore와 대응되고,
- 키워드 매개변수 방법을 적용한 j는 engScore와, 그리고 k는 mathScore와 대응
sub(i, j=>engScore, k=>mathScore);
Default 매개 변수
Ada의 디폴트 매개 변수를 알아보자
with Ada.Text_IO;
use Ada.Text_IO;
procedure Default is
package Int_IO is new Ada.Text_IO.Integer_IO (Integer);
use Int_IO;
i, k : Integer;
procedure Sub(KoreanScore: Integer; MathScore: Integer := 60; EngScore: Integer) is
begin
Put("Korean: ");
Put(KoreanScore);
New_Line;
Put("Mathematics: ");
Put(MathScore);
New_Line;
Put("English: ");
Put(EngScore);
end Sub;
begin
i := 80;
k := 70;
Sub(i, engScore => k);
end Default;
제공된 Ada 코드에서 Sub
절차에는 MathScore: Integer := 60
이라는 기본 매개변수가 있습니다.
즉, Sub
프로시저를 호출할 때 호출자가 MathScore
매개변수에 대한 값을 제공하지 않으면 자동으로 기본값인 60이 할당됩니다.
예를 들어 코드 스니펫 Sub(i, engScore => k)
에서 MathScore
인수는 명시적으로 제공되지 않습니다.
결과적으로 ‘Sub’ 프로시저를 실행할 때 ‘MathScore’ 매개변수에 기본값인 60이 사용됩니다.
C++도 비슷한 느낌으로 매개변수를 사용한다
#include <iostream>
using std::cout;
using std::endl;
void sub(int koreanScore, int mathScore, int engScore = 60) {
cout << "korean: " << koreanScore << endl;
cout << "mathematics: " << mathScore << endl;
cout << "english: " << engScore << endl;
}
int main(void) {
sub(80, 70, 90);
sub(70, 50);
return 0;
}
부프로그램의 종류
- 프로시저 : 값을 반환하지는 않고 부작용을 만듦
- 함수 : 값을 반환하고 부작용은 없음
하지만, 프로시저와 함수를 별도로 구분하지 않기도 한다
FOTRAN
SUBROUTINE CopySub(A, B, N)
INTEGER A(N), B(N)
DO 10 I = 1, N
A(I) = B(I)
10 CONTINUE
RETURN
END
위의 포트란 프로시저는 CALL COPYSUB(K,L,I)
와 같다
INTEGER FUNCTION ADD(A, B)
ADD = A + B
RETURN
END
위의 포트란 함수는 I = ADD(K,L)
과 같이 사용한다
Ada
procedure incre(x, y: in out integer) is
begin
x := x + 1;
y := y + 1;
end incre;
위는 Ada의 프로시저이다.
function 함수이름(매개변수) return
반환값타입 is
begin
return 반환값;
end 함수이름;
위는 Ada의 함수이다.
C
C언어의 경우 값을 반환 할 때 함수 이름 왼쪽에 반환하는 값의 타입을 쓴다
int add(int x, int y)
{
return x+y;
}
- 값을 반환하지 않으려면, void 사용
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'Computer Science > 프로그래밍 언어론' 카테고리의 다른 글
프로그래밍언어론 - 중복 부프로그램 (0) | 2023.05.30 |
---|---|
프로그래밍언어론 - 매개변수 전달 방식 (0) | 2023.05.30 |
프로그래밍언어론 - 반복문 (0) | 2023.05.30 |
프로그래밍 언어론 - 조건문 (0) | 2023.05.30 |
정규 언어, 정규 문법, 유한 오토마타의 동치 관계 (0) | 2023.05.28 |