본문 바로가기
언어/C++

[C++ 기본 공부정리] 11-1. 함수(function) 기본

by 민-Zero 2019. 12. 5.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다.

틀린 부분에 대한 지적은 감사합니다.

1. 함수 정의

함수란 특정 작업을 수행하기 위해 설계된 재사용 가능한 코드의 집합이다. main() 또한 함수이며 main 이외에도 다양한 함수를 정의하여 사용 한다. main에서 함수의 호출을 만날경우 현재 진행중인 함수를 일시정지하고 호출한 함수를 수행하도록 cpu에 지시하여 호출된 함수를 순차적으로 수행한다. 함수가 종료될경우 호출한 곳으로 돌아가 마저 수행한다.

함수 선언)

함수의 선언은 위와 같다. 여기서 int는 함수의 반환 타입 func은 함수명 ()안의 변수는 매개변수 {}는 함수의 몸체이다.

1. 반환 타입(return types) : 함수가 정의된 기능을 끝마친뒤 반환할 데이터 타입을 정의한다.

2. 함수명 : 새로 만들 함수의 이름을 정의한다.

3. 매개변수(parameters) : 함수 호출시 함수로 전달되는 값을 저장하는 변수로 함수 내부에서만 사용 가능한 지역변수 이다.

4. 함수 몸체 : 함수의 기능을 정의하는 부분이다.

 

함수의 매개변수는 여러개를 가질수 있지만 반환값은 1개 또는 반환값이 없을수도 있다. 반환값이 없을경우 반환타입은 void이며 반환값이 존재할 경우 반환 타입 으로 정의한 타입과 일치해야 한다. 반환 타입은 배열을 제외한 모든 타입이 가능하다. 하지만 배열이 구조체나 객체에 포함되어 있다면 반환 가능하다.

 

2. 함수 선언 및 정의

함수를 정의할때 순서가 중요하다. 예를 들어 매개변수로 받은 두개의 정수를 더해 더한값을 반환해주는 함수가 있다고 하자.

 

분명 sum이라는 함수를 선언및 정의 하였지만 main함수에서 sum을 찾을수 없다는 에러가 발생한다. 이유는 sum함수의 위치 때문이다. 컴파일이 진행되면 컴파일러는 main함수를 제일 먼저 컴파일 하게된다. 코드를 진행하면서 sum이란 함수의 호출을 만나게 되는대 컴파일러는 sum이란 함수의 선언을 만난적이 없기 때문에 sum이 무엇인지 몰라 오류를 발생하게 된다. 

따라서 main함수 위에 함수를 먼저 선언및 정의하여 main함수가 진행될때 sum이 어떤 함수인지를 알려 주거나 또는 main함수 위에 함수의 원형 선언만 하여 sum이란 함수의 존재를 알리고 main밑에 정의를 하여 main이 호출할때 sum을 찾아가도록 하는 방법이 있다.

 

3. 반환값(return values)

값을 반환 하기 위해서 명령어 return 반환값; 을 사용하며 어떤 함수든 return을 만날경우 남은 코드를 무시하고 함수를 호출한곳으로 돌아가 값을 반환하게 된다.

main() 함수는 실행이 끝나면 return 명령문을 통해 정수값을 main을 호출한 운영체제 에게 반환한다. 이때 정수값은 상태코드로 프로그램이 정상적으로 종료가 되었는지를 알려준다. 일반적으로 0이 정상 종료코드 이며 다른 양수값이  정상적으로 종료하지 못하였음을 알려준다. 이러한 이유 때문에 main함수 맨 마지막에 return 0;를 입력하는 것이며 굳이 입력하지 않아도 자동으로 반환하기는 한다. 

 

사용자가 직접 생성한 함수의 경우 반환 타입과 함수 종료시 반환되는 반환값을 일치 시켜야 에러가 발생하지 않으며 반환 타입을 지정하고 return value가 없을 경우에도 에러가 발생한다.

 

반환값이 굳이 필요하지 않을경우 반환타입을 void로 설정하면 반환값이 존재하지 않아도 에러를 발생시키지 않는다.

댓글