피씨컴의 기울어진 공관

● 함수의 종류

- 반환값(Return Value)이 있는 함수

- 반환값이 없는 함수

 

● 함수의 장점

- 프로그램을 모듈 단위로 분할해서 설계 구현할 수 있다.

- 프로그램 내부에 세부적인 연산이나 작업 등을 함수의 내부에 숨길 수 있어 프로그램을 명료화 시킬 수 있다.

 

● 함수의 선언과 정의의 차이

- 선언(Declaration) : 컴파일러에게 사용자가 만든 변수와 함수를 미리 알려준다

컴파일러가 메모리를 확보하지는 않는다

선언은 정의를 겸할 수 없다.

- 정의(Definition) : 사용자가 만든 변수와 함수가 실제로 구현되는 부분이다

   컴파일러가 메모리를 확보한다

   정의는 언제나 선언을 겸할 수 있다.

※ 내부 변수의 경우엔 정의와 선언은 구별되지 않습니다 즉 선언과 동시에 정의가 된다는 의미입니다. 그러나 외부 변수는 선언과 정의가 구별됩니다.

 

 

● 함수의 기본구조

 

데이터형 함수명(데이터형 인수1, 데이터형 인수2....)  // 사용자 정의 함수 선언

void main()
{

 함수명(데이터형 인수1, 데이터형 인수2....)  // 함수 호출

}

데이터형 함수명(데이터형 인수1, 데이터형 인수2....) //선언한 함수 정의 부분

{

내부변수 , 함수 선언  // 해당 함수에서만 사용하는 변수와 함수 선언

 

return (식)    // 자신을 호출한 위치로 리턴 값 반환(없을수도 있음)

}

 

● 함수의 인수 전달 방식

- Call by Value (값의 의한 호출) : 인수들 사이의 관계에서 데이터 값을 전달하는 방식으로 데이터 값을 복사하여 전달 합니다. 즉 값을 복사 하기 때문에 원본이 변하지 않습니다.

 

- Call by Reference (주소에 의한 호출) : 변수 내부의 값을 전달하는 것이 아니라 메모리 상에 위치한 그 변수의 주소(address)를 전달하는 방식입니다. 이 방식으로 값을 전달하게 되면 원본값이 바뀔 수 있습니다.

- 재귀 호출(Recursive Call) :  자기호출, 되부름 이라고도 하는데 말 그대로 자기가 자기자신을 호출하는 함수를 말합니다 함수가 자기 자신을 호출하게 되면 함수 안에 사용했던 변수들을 스택(stack)상에 쌓아두게 되며 반환점이 되는 문장을 만나게 되면 stack에서 하나씩 복원되는 과정을 거치게 됩니다.

재귀호출은 시스템의 성능을 현저하게 떨어뜨리는 원인이 될 수 있습니다 심지어는 메모리의 용량을 벗어난 재귀 호출은 시스템을 다운시키게도 합니다. 그래서 되도록이면 재귀호출은 쓰지 않는 것이 바람직 합니다. 재귀호출을 하는 함수를 작성할때에는 반드시 반환점이 있어야 합니다. 그렇지 않으면 Stack overflow라는 치명적인 메모리 에러가 발생하게 되며 시스템이 다운되게 됩니다.

 

 

● 함수 원형은 왜 필요한가?

함수원형은 컴파일러에게 함수의 인터페이스를 알려준다. 즉 리턴값이 있으면 그 리턴값의 데이터형을 컴파일러에게 알려준다. 또 한 전달인자의 개수와 각 전달인자의 데이터형을 컴파일러에게 알려준다

● 함수 원형이  사용자를 위해 하는일

- 컴파일러가 함수의 리턴값을 바르게 처리한다

- 사용자가 정확한 개수의 전달인자를 사용했는지 컴파일러가 검사한다

- 사용자가 정확한 데이터형의 전달인자를 사용했는지 컴파일러가 검사한다 만약 정확하지 않으면 정확한 데이터형으로 변환한다.

 

'프로그래밍 > 참고' 카테고리의 다른 글

문자열 관리 함수들 총집합!  (0) 2013.02.24
Call by value, adrees, reference  (1) 2013.02.05
함수  (0) 2013.02.03
지역 변수 / 전역 변수  (0) 2013.01.31
메모리 영역  (0) 2013.01.31
Posted by 피씨컴