(1) 서브프로그램 정의
-sub program (=function, procedure, subroutine)
-사용 이유 : 프로그램 크기 줄이기, 모듈화, readability, 유지보수&디버깅 용이
-요소 : Name, parameter list, body, reference environment
-호출 : name, 매개변수의 개수와 유형, 리턴 값의 개수와 유형 필요
-> proc(i,j)로 호출 ---C언어 / 결과 반환: return 결과;
-재귀 함수 : 함수 자체를 이용하여 function을 구현하는 것
-블록 구조
-블록 = 선언부(declaration part) + 실행부(execution part)
-C언어의 블록 : 이름 없는 블록(ex, for 문) , 중첩 블록은 없음
-특징)
-지역 변수 선언 : 정보 은닉, 블록 외부에서 접근 불가
-블록 실행 시 지역 변수에 대한 메모리 할당(stack) , 블록 끝나면 메모리 반환
-이름 있는 블록만 호출 가능 : 내부 블록은 외부 블록에 감춰지기 때문에 블록 외부에서는 블록 안에 있는 sub-program 호출 불가능
(2) 매개변수 전달
-매개 변수 종류)
-실인자(actual parameter) : 실제 값을 가지는 매개 변수
-형식 인자(formal parameter) : 함수 선언에 나타나는 매개 변수
-실 매개 변수의 개수 <= 형식 매개 변수의 개수
(3) 복잡한 자료구조 전달
값에 의한 호출(call by value) : 값 전달
-실 매개 변수와 형식 매개 변수는 서로 다른 메모리 공간을 차지
-실 매개 변수 값(r-value) -> 형식 매개 변수
값과 결과에 의한 호출 (call by value result) : 값과 결과 전달
-값 전달 + 형식 매개 변수의 값을 실 매개 변수에 돌려줌 -----> result
참조에 의한 호출 (call by reference)
-실 매개 변수와 형식 매개 변수 서로 같은 메모리 공간을 차지
-실 매개 변수의 주소(l-value) -> 형식 매개 변수
이름에 의한 호출 (call by name) : 이름 전달
-매개 변수가 사용될 때마다, 필요한 실 매개 변수의 l-value or r-value 계산되고 사용됨
java에서의 매개 변수 전달 방법
배열 전달
레코드 전달(struct in C)
1) call by referenct 많이 사용
void sub(struct colors *s) {...}
void main(){
struct colors col ={"red", "blue"};
sub(&col);
}
8.sub-program passing(함수 자체를 전달)
1) sub-program name+ 매개변수들
int process(int (*pf)(int, int), int x , int y){...}
void main(){
printf("%d", process(add,8,4)); //add함수 자체를 전달
}
9.함수 중복 : C에서는 지원 안 함, C++에서는 같은 함수 이름+ 다른 매개 변수 리스트인 경우 함수 중복 가능
double square(double f){...}
int square(int a){...}
(4)서브프로그램의 구현 및 실행
-sub-program 호출
-현재 실행중인 프로그램 상태 저장
-sub-program으로부터 제어 반환
-호출한 다음 문장 실행
<sub-program 호출과 반환 구조>