함수(Function)(2)


이번에는 헤더파일과 분할컴파일에 대해 알아보겠습니다. 


- 헤더파일

 우선 헤더파일은 시스템에 설치된 시스템 라이브러리 헤더파일이 있고, 함수처럼 직접 만들어 사용할 수 있습니다. 아래 위치는 헤더파일이 있는 위치입니다. 개발환경에 따라 다를 수 있습니다. 

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include

 아래 그림처럼 include 폴더에는 수 많은 헤더파일이 있습니다.

수 많은 헤더파일 중에 제가 사용했었던 stdio.h를 visual studio로 열어 봤습니다. 아래 그림을 보면 stdio.h의 헤더파일에 printf 함수가 선언된걸 확인 할 수 있습니다. 이처럼 헤더파일을 직접 만들어서 직접 구현한 함수를 추가 해서 인클루드할 수 있습니다.


- 분할 컴파일

 분할 컴파일은 분리 컴파일 이라고도 하며, 하나의 프로그램을 여러 조각으로 나눠서 작성·관리 하는 기능입니다. 프로그램의 크기가 커지거나 같은 기능을 반복적으로 사용하는 경우  프로그램을 기능별로 나누면 관리 및 재활용이 용이합니다. 분할 컴파일은 컴파일 시간이 줄어들고, 여럿이서 동시에 프로그램 개발할 때 유용합니다.


아래 코드는 함수(1)게시글에서 정의 한 함수를 분할 컴파일한 코드입니다.

------------------------------------------------------------------------------------------

// cal.h 

// 헤더파일에는 함수의 정의만 해줍니다.

int plus(int a, int b); 

int multi(int a, int b);

------------------------------------------------------------------------------------------

// cal.c

#include "cal.h" 

// 동일한 이름의 c파일을 생성해서 헤더파일을 인클루드하고 함수를 구현합니다.

// 직접 만든 헤더파일은 <>가아닌 ""를 사용합니다.

int plus(int a, int b)

{

return a + b;

}


int multi(int a, int b)

{

return a * b;

}

------------------------------------------------------------------------------------------

// main.c
#include <stdio.h>
#pragma warning(disable:4996)
#include "cal.h" // cal.h헤더파일을 인클루드하면 cal.h헤더파일에 정의한 함수를 사용할 수 있습니다.

int main()
{
int a, b, result;
printf("a,b를 입력하시면 합과 곱이 출력됩니다. \n");
printf("a를 입력하세요 : ");
scanf("%d", &a);
printf("b를 입력하세요 : ");
scanf("%d", &b);

result = plus(a, b);
printf("%d + %d = %d \n", a, b, result);
result = multi(a, b);
printf("%d * %d = %d \n", a, b, result);

return 0;
}

------------------------------------------------------------------------------------------

분할 컴파일 결과 함수(1)게시글과 결과가 동일합니다.


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_2 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook




'언어 > C' 카테고리의 다른 글

[C] 디버깅  (0) 2016.12.21
[C] 매개변수 전달 방식  (0) 2016.12.20
[C] 함수(1)  (0) 2016.12.20
[C] 기타 제어문  (0) 2016.12.19
[C] 반복문  (0) 2016.12.18

함수(Function)(1)


 함수는 입력된 값을 이용해 결과를 반환해 주는 프로그램 코드로, 앞에서 공부할때 썼던 main함수, scanf, printf 등도 함수에 속합니다. 함수의 종류는 시스템 정의 함수

(시스템 라이브러리)와 사용자 정의 함수가 있습니다.


- 반환값, 매개 변수

 반환값은 리턴값이라고 말하기도 하는데, 리턴할 값을 말합니다. 앞에서 공부하면서 거의 사용하지는 않았는데, 아래 처럼 int형으로 main함수를 사용했을때, "return 0;"이 함수 종료 후 0을 반환하겠다는 뜻입니다. 반환값이 필요없을때는 void로 써주면 됩니다.

------------------------------------------------------------------------------------------

int main() // 매개변수가 필요하지 않을때는 main 함수처럼 ()로 써주면 됩니다.
{
printf("hello \n");

return 0; // 함수 종료 후 0을 반환
}

------------------------------------------------------------------------------------------

 매개변수는 함수에서 사용할 인자값으로 쉽게 말해 형식이라고 생각하면 이해하기 쉽습니다. 아래 사용자 정의 함수의 코드에서 plus 함수와 multi 함수의 int a, int b가 매개변수입니다.

시스템 정의 함수 

 C언어에서 미리 정의해 놓은 함수로 scanf, printf 등이 있습니다. 헤더파일을 include하면 사용할 수 있습니다.


- 사용자 정의 함수

 사용자가 직접 정의하는 함수입니다. 함수의 모양을 선언하는 과정인 함수원형 선언과,  함수 구현 과정이 있습니다. 함수 원형 선언은 헤더파일 밑에, 함수 구현은 main 함수 밑에 하면됩니다. 아래 코드는 덧셈과 곱셈을 하는 함수 2개를 직접 정의해 구현해서 사용하는 코드입니다.

------------------------------------------------------------------------------------------

#include <stdio.h>
#pragma warning(disable:4996)

int a, b; // plus함수와 multi함수에서 쓸 a,b를 선언
int plus(int a, int b); // plus 함수 원형 선언
int multi(int a, int b); // multi 함수 원형 선언

int main()
{
int x, y; // 위에 a,b를 선언하지 않고 여기서 a,b로 선언해서 사용해도 무관
  int result; // 함수를 호출해 리턴값을 저장할 변수 선언

printf("x,y를 입력하시면 합과 곱이 출력됩니다. \n");
printf("x를 입력하세요 : ");
scanf("%d", &x);
printf("y를 입력하세요 : ");
scanf("%d", &y);
result = plus(x, y); // plus함수 호출 후 리턴값 저장
printf("%d + %d = %d \n", x, y, result);
result = multi(x, y); // multi함수 호출 후 리턴값 저장
printf("%d * %d = %d \n", x, y, result);

return 0;
} //close main()

int plus(int a, int b) // multi 함수 구현
{
return a + b; // 리턴값으로 a+b를 리턴
}

int multi(int a, int b) // multi 함수 구현
{
return a * b; // 리턴값으로 a*b를 리턴
}
------------------------------------------------------------------------------------------
 아래 그림이 위 코드의 결과입니다. 사실 아래 처럼 간단한 연산은 굳이 함수를 정의해서 사용할 필요가 없지만, 복잡한 연산이나 복잡한 처리는 사용자 정의 함수를 이용하면 좀 더 실용적인 코딩을 할 수 있을 것입니다.


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_2 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook




'언어 > C' 카테고리의 다른 글

[C] 매개변수 전달 방식  (0) 2016.12.20
[C] 함수(2)  (0) 2016.12.20
[C] 기타 제어문  (0) 2016.12.19
[C] 반복문  (0) 2016.12.18
[C] 조건문  (0) 2016.12.17

+ Recent posts