Language/C

[ C ] 함수

곽수진 2021. 10. 26. 17:06
반응형

함수

필요한 입력을 받아 원하는 어떤 기능을 수행한 후 결과를 반환하는 프로그램 단위

→ 일종의 블랙박스 모델

    : 내부 코드를 몰라도 사용이 가능함

 

  • 진입점 함수

      : 프로그램이 시작될 때 운영체제에 의해 호출

      : 프로그래머가 작성하지만 호출하지는 않음

int main(void){
}

 

 

  • 라이브러리 함수

      : 입출력과 같은 고유의 기능을 제공

      : 이미 코드가 만들어져 있어 라이브러리 헤더를 포함하고 호출하면 됨

#include <stdio.h>
char ch;
scanf("%c", &ch);
printf("%c", ch);

 

 

  • 사용자 정의 함수

      : 프로그래머가 직접 정의하고 호출

      : 프로그램에서 특정 기능을 제공하는 코드 부분을 묶어 함수로 만들어두고 사용함

int add(int x, int y){
    retury x+y;
}
printf("%d", add(10, 20));

 

★ 사용자 정의 여부 / 반환값과 인자 유무 / 인자(매개변수) 종류에 따라 함수 구분 가능 ★

 

 

 

Benefits?

  • 코드를 함수로 한 번만 작성해두면 반복해서 작성할 필요가 사라짐

      → 여러 번 호출해서 사용 가능

  • 코드가 중복되지 않아 간결하고 알아보기 쉬움
  • 한 번 작성해둔 코드를 여러 번 사용하므로 코드의 재사용성이 높음
  • 기능 위주로 함수를 작성해서 사용하기 때문에 프로그램의 모듈화가 증대됨
  • 함수 코드를 수정하더라도 함수를 호출하는 부분은 수정할 필요가 없어 프로그램을 유지 보수하기 쉬움

 

 

Process?

  • 함수의 선언(함수 원형, prototype / signature)

      : 함수에 대한 정보(리턴형, 함수 이름, 매개변수 목록) 제공

        → 매개변수의 이름은 생략 가능

        → 매개변수의 데이터형만 콤마(,)로 나열

        → 일반적으로 소스 파일 시작 부분에 넣어줌

 

 

반환형 함수이름(매개변수형, ...);
double get_area(double radius);

 

      ★함수를 호출하기 위해서는 먼저 함수가 정의되어 있어야 함 ★ 

 

 

  • 함수의 정의 = 함수 머리(header) + 함수 몸체(body)

      : 리턴형, 함수 이름, () 안에 매개변수 목록을 써준 다음 {} 안에 실제로 함수가 수행할 내용 기술

        → 매개변수 목록은 데이터형과 매개변수가 한 쌍이며, 하나 이상인 경우 콤마(,)로 나열

        → 매개변수가 없을 때는 void라고 적거나 비워둠

 

      ★ return형을 생략하면 int로 간주함 ★ 

 

 

반환형 함수 이름(매개변수 목록, ...)
{
    명령;
    명령;
    ...
    [return 반환값;]
}
double get_area(double radius){
    const double pi = 3.14;
    return pi * radius * radius;
}

 

 

  • 함수의 호출

      : 앞에서 선언되거나 정의된 함수 이용

      : 인자를 넘겨주고 리턴 값을 받아올 수 있음

        → 함수 정의는 한 번만 작성하고 필요한 만큼 여러 번 호출해서 사용

        → 함수 이름 다음에 ()를 쓰고, () 안에 함수의 인자 작성

        → 함수를 호출하는 쪽과 정의는 서로 데이터를 주고 받음

 

 

- 인자도 반환값도 없는 경우

함수이름();
#기본 모습
void function(void){
명령;}

#호출
func();

 

 

- 인자는 있고 반환값은 없는 경우

함수이름(인자목록);
#기본 모습
void func(int a, double b, int c){
명령;}

#호출
func(23, 12.45, 56)

 

 

- 인자는 없고 반환값은 있는 경우

변수 = 함수 이름();
#기본 모습
int func(void){
명령;
return 56;}

#호출
int x;
x=func();

 

 

- 인자도 반환값도 없는 경우

변수 = 함수 이름(인자 목록);
#기본 모습
char func(int a, double b){
명령;
return 'b'}

#호출
x = func(1, 3.4);
반응형