함수원형을 선언 해주는 이유?

이 함수 정의만으로 충분할 것 같은데 왜 쓰잘때기 없이 '함수 원형'이란게 필요할까요?
거기엔 며느리도 모르는 깊은 뜻이 담겨져 있습니다. 

첫째, 
함수 원형은 function_name() 함수가 int형 전달인자를 두개 가진다는 사실을 컴파일러에게 알려줍니다.
즉, 프로그램이 function_name()에 전달인자를 제공하지 않으면 컴파일러는 함수 원형에 근거하여 에러를 검출합니다. 

둘째, 
function_name() 함수는 계산을 끝냈을때(함수 정의 반환) 반환값을 레지스터나 메모리에 값을 임시 저장해 두는데 이 저장된 값을 호출한 함수(여기서 main함수 ; main함수내에서 function_name()함수를 호출하였으므로)가 그 위치에서 값을 가져옵니다. 이 과정에서 함수 원형에 int라는 반환 데이터형을 선언하였기 때문에 컴파일러는 이를 근거로 int형 데이터를 가져오는 겁니다. 

결국 함수 원형의 존재 목적을 압축해 보면 함수원형은 컴파일러와 직접적으로 관계가 있다는 겁니다. 
컴파일러가 함수 원형을 근거로 데이터형을 비교함으로써 에러를 검출하고 자기 자신의 일에 충성을 다하는것이죠. 


함수 원형의 선언 규칙은 이렇습니다. 

int fucntion_name(int x);   // 함수 원형은 함수 머리에 ;을 추가하여 만듭니다.

그리고 함수 원형은 굳이 전달인자의 변수 이름을 선언할 필요는 없습니다. 
하지만 함수 정의부에는 반드시 명시해 주어야 합니다. (처음 배울때 이것땜에 좀 헷갈렸었지요...)

int function_name(int);    //함수 원형에서만! 변수명을 생략해도 됩니다. 선언부에서는 반드시 선언!!!


함수 원형이 사용자를 위해 어떤 일을 할까? 

함수원형이 컴파일러와 직접적으로 연관이 있는것을 알면서 함수 원형이 함수로 인한 에러를 만들 확률이 낮아진다는 것을 알게 됬습니다. 즉, 함수 원형은 다음 사항들을 보장하여 줍니다. 

하나, 컴파일러가 함수의 리턴값을 바르게 처리
둘, 사용자가 정확한 개수의 전달인자를 사용했는지 컴파일러가 검사
셋, 사용자가 정확한 데이터형의 전달인자를 사용했는지 컴파일러가 검사, 만약 정확하지 않으면 정확한 데이터형으로 변환!



출처 : C++ 기초플러스 / 성안당

이 글을 공유하기

댓글

Designed by JB FACTORY