오늘은 함수예요.
함수는 헷갈려요.
하지만 괜찮아요.
함수를 정복하자!
함수란
기능을 수행하는 코드단위를 말합니다.
표준 라이브러리 함수란
특정기능을 미리 약속하고 프로그램에서 바로 수행할 수 있게 구현되어 있는 함수입니다.
함수 정의는 함수를 실제 코드로 만드는 것이며 기능을 구현하는 역할을 합니다.
함수 정의를 한 함수를 함수 원형이라고 합니다.
함수 원형은 1. 함수명 2. 매개 변수 3. 반환형 이 세가지로 구성됩니다.
함수의 기능에 맞는 이름을 선정합니다.
구현하려는 기능을 영어로 쓰는것이 알아보기 쉽고 편한 방법입니다.
매개 변수는 함수가 기능을 수행할 때 필요한 데이터입니다.
함수명 옆의 괄호 안에서 선언하고 콤마로 구분합니다.
함수가 수행된 후 호출한 곳으로 돌려줄 값의 자료형을 적습니다.
함수 정의
반환형 함수명(매개변수1, 매개변수2) // 함수 원형
{
// 함수가 수행할 내용
}
함수 안에서만 사용하는 변수명은 다른 함수의 변수명과 같을 수 있어 중복에러가 뜨지 않습니다.
함수는 호출을 통해 실행됩니다.
인수
함수에 필요한 데이터를 괄호 안에 넣어주는 것.
인수에는 상수, 변수, 수식을 쓴다면 수식의 결괏값이 인수로 쓰일 수 있습니다.
함수호출에 입력된 인수는 호출된 함수의 매개변수로 사용됩니다.
return문
호출된 함수가 실행을 끝내고 값을 반환할 때 사용합니다.
저장된 반환값을 대입 연산으로 다른 변수에 복사하거나 수식에 바로 사용하는 것이 가능합니다.
컴파일러가 새로 만든 함수를 인식할 수 있도록 알리는 역할을 합니다.
main함수 바로 앞에 하며 매개 변수이름을 생략할 수 있고, 함수 원형에 세미콜론만 붙이면 됩니다.
컴파일러는 컴파일할 때 함수를 호출한 자리에 반환값과 같은 형태의 저장공간을 마련합니다. (정수면 int형 공간을, 실수면 double형 공간을) 따라서 함수를 호출하기 전에 선언을 통해 반환형을 미리 컴파일러에 알릴 필요가 있습니다.
함수 선언문에 매개 변수의 정보가 있으므로 호출할 때 정확한 값을 주는지 검사합니다.
있습니다.
컴파일러가 호출 함수의 반환형을 int형으로 생각해 컴파일합니다. int형으로만 생각하기 때문에 실수가 오면 경고메세지를 띄웁니다.
반환형과 매개변수가 없는 함수도 있습니다.
값을 입력받으면 호출한 함수로 부터 값을 받을 필요 없으므로 매개 변수도 필요 없습니다.
매개 변수 자리에 void를 넣어줍니다.
함수원형
int get_num(void)
괄호안에 void를 넣어 매개 변수가 없음을 표시합니다.
함수 호출
get_num();
괄호를 비워 매개 변수가 없음을 표시합니다.
하지만 괄호가 비었다고해서 괄호를 생략해서는 안됩니다.
데이터를 받아 단지 화면에 출력하는 함수하면 출력한 내용이 함수 수행 결과이므로 반환값이 필요없습니다.
반환값 자리에 void를 넣어줍니다.
반환값이 없으므로 return; 만 쓰거나 아예 안써줘도 됩니다.
함수 실행 중간에 돌아가야 한다면 return문은 함수 어디서나 사용가능합니다.
입력받은 같은 내용을 단지 화면에 출력한다면 매개 변수와 반환값이 모두 필요없습니다. return문 또한 필요없습니다.
매개 변수와 반환값에 모두 void를 넣어줍니다.
함수 안에서 자기자신을 호출하는 함수입니다.
함수가 모든 명령 수행 후 자동으로 반환하기전에 자신을 호출하므로 처음부터 시작합니다.
그러면 무한으로 출력된다고 생각하겠지만 아닙니다.
호출할때 메모리를 사용하기 때문에 메모리를 모두 사용하면 강제 종료가 됩니다.
이건 정상적인 종료가 아니기 때문에 정상적인 종료를 시키려면
조건식이 필요합니다.
재귀호출도 반복이고 반복문도 반복이니 차이점이 뭔가 싶을것 입니다.
반복문은 일정 값까지 반복하는 시스템이고
재귀호출은 함수 수행뒤 이전에 호출했던 곳으로 돌아가면서 실행되기 때문에 반복하는 것처럼 보이는 것입니다.