프로그래밍/C,C++

함수(function)

GONII 2015. 3. 24. 08:54

함수란?

함수?? F(x)?? 수학에서 함수란 입력값이 있고 입력값에 따라 내부적인 연산을 하여 그 결과를 출력한다??라고 알고 있음

그렇다면 프로그래밍에서 함수란 무엇일까??

수학적인 개념과 비슷하다. 수학에서 함수에 입력값과 내부 연산이 있고 출력값이 있듯이

프로그래밍에서는 1)입력값이 있을 수도 있고, 2)내부 연산이 있을 수도 있고, 3)출력값이 있을 수도 있다.

"있을 수도 있다"라는 말은 "없을 수도 있다"는 뜻이다

극단적으로 얘기로 하자면 입력값도 없고 내부 연산도 없고 출력이 없어도 프로그래밍에서는 함수라고 할 수 있다는 것이다.

함수의 활용

극단적인 예이지만 위에서 입력값도 없고 내부 연산도 없고 출력도 없어도 함수라고 하였다. 입력도 없고 내부 연산도 없고 출력도 없는 함수는 아무 일도 하지 않기 때문에 있으나마나 한 코드가 된다.

그렇다면 함수를 왜 만들어야 할까??

  1. 반복된 코드들의 재활용
  2. 코드의 가독성 향상
  3. 필요할지도 모를 기능들을 정의(편의 기능)

1, 2번의 경우는 많은 책에서 다루고 있고, 3번에 대해 의아해 할 수도 있지만 stdlib.h나 stdio.h와 같은 표준 헤더 파일을 보면 알 수 있듯이 필요할 것 같고, 많이 사용될 것 같은 함수들의 집합을 제공하는 것이다.

이처럼 사용자 정의 함수(우리가 만들 함수)도 위와 비슷한 필요성에 의해 만들어 진다고 할 수 있다.

사용 방법

  • myFunction.h

// 함수 선언
void swap(int *a, int *b);

  • myFunctin.c

#include "myFunction.h"
// 함수 정의

void swap(int *a, int *b)

{

int temp;

temp = *a;

*a = *b;

*b = temp;

}

  • main.c

#include <stdio.h>
#include "myFunction.h"
 

void main()

{

int num1 = 3;

int num2 = 6;

   

// 함수 호출

swap(&num1, &num2);

}

간단한 swap함수를 만들어 파일 분할하여 함수의 선언과 함수의 정의, 함수 호출을 해보았다.

main.c에서 "myFunction.h" 파일을 인클루드하여 swap함수의 원형을 알 수 있기 때문에 컴파일이 되고난 후에 링커에 의해 연결되게 된다.

그리고 main함수에서 swap함수를 호출하며 두 개의 매개변수를 넘기고 있다.

main함수에 swap함수 호출을 하면 호출된 함수의 지역의 코드를 실행하고 끝나면 다시 main함수로 돌아오게 된다. 순서대로 살펴보면 위에 번호와 같다.

  1. swap함수 호출
  2. &num1, &num2전달
  3. swap(int *a = &num1, int *b = &num2)로 초기화되며 swap지역에 있는 코드 내용들이 실행
  4. 지역 변수인 int temp와 int *a, int *b(매개변수 또한 지역변수이다)가 사라지고 다시 main함수(swap을 호출한 곳)로 복귀한다.

위의 main함수와 아래의 main함수는 동일하게 동작한다.

반응형

'프로그래밍 > C,C++' 카테고리의 다른 글

상속의 기능  (0) 2015.02.14