monolithic programming: main함수에 모든 함수들을 때려박은 것으로, 코드의 줄이 길어지고 가독성이 떨어진다. 또한, 수정할 경우에 모든 코드들을 읽어야한다.
modular programming: 헤더파일 또는 소스코드들을 분할 컴파일을 통해 모듈화 작업을 할 수 있다. 이는, 에러가 난 함수를 찾아서 고치기만 하면 되어서 매우 효율적이다.(단, 헤더파일이 중복되면 안되고, cpp파일이 서로 링크가 되어야 한다.)
#include <iostream>
using namespace std;
int add(int a, int b)//called function prototype(or declaration)
{ //()<-paramater
int c;
c = a + b;
return c;
}
int main()
{
int x = 10, y = 5;
int z;
z = x + y;
add(x,y);//argument(or actual parameter)
cout << z << endl;
return 0;
}
add(x,y)를 호출 -> 제어가 main에서 add로 이동 & argument가 parameter로 복사됨. 즉, x=10이 a로, y=5가 b로 복사 -> 함수 정의부분에서 복사된 a와 b의 값이 c에 저장됨 -> 함수를 반환하면 add의 활성화 레코드(스택 프레임)은 파괴되고 다시 제어가 main으로 이동되면서 반환된 값이 z에 할당됨
함수간의 제어이동은 assembly language의 subroutine그것과 같다. 즉, 함수를 호출하면 분기가 일어나서 제어흐름이 subroutine로 이동한다.