노는게 제일 좋습니다.

6회차 : 함수의 구성 원리, 헤더 파일 본문

C

6회차 : 함수의 구성 원리, 헤더 파일

노는게 제일 좋습니다. 2017. 2. 3. 23:55

1. 함수의 정의

프로그램을 구성하는 부품으로 비유할 수 있다. main 함수를 중심으로 여러 함수를 순서대로 실행하며 프로그램이 굴러간다.


2. 사용자 정의 함수 정의

#include <stdio.h>

void main()
{
  printf("%d", examFunction(1,2));
}

int examFunction(int a, int b)
{
  int temp = a+b;
  return temp;
}

위 코드에서 examFunction 함수가 사용자 정의 함수의 예이다.

여기서 main이 examFunction을 호출했으므로, main은 examFunction의 호출원이라고 한다.

함수 이름 앞의 자료형은 반환값의 자료형이다. 이름 우측에는 받을 인수(Parameter)를 기술한다.


인수의 자료형을 위와 같이 쓰지 않고, 아래와 같이 나중에 밝혀 써도 된다. 구형 C컴파일러의 방식이라고 한다.

int examFunction(a, b)

int a,b;
{
  int temp = a+b;
  return temp;
}

어... 근데 굳이 이렇게 쓸 이유는 없는 것 같다.


3. 인수의 구분

2번 항목의 코드에서 examFunction 함수 정의부에 기술된 인수(Parameter)를 '형식 인수', 혹은 '형식 매개변수'라고 부른다.

main함수에서 examFunction을 호출할 때 넘기는 인수(Argument)를 '실 인수' 혹은 '실 매개변수'라고 한다.


참고로 실인수(Argument) 가 형식인수(Parameter)로 전달 될 때, 주소가 아닌 값이 전달된다.

즉, 값에 의한 호출 방식을 사용한다.


4. 인수를 받지 않는 함수

int exam(){ .. } 와 같이 비워두거나

int exam(void){ ... } 와 같이 void로 채운다.


5. return문의 역할

(1) 값 반환 (2) 함수 종료

만약 main함수에서 값을 return하면 프로그램 전체를 종료하게 된다.


6. void형 함수

void exam(char a)

{

  printf("%c",a);

}

그냥 리턴값 없는 함수다


7. 함수 원형

int main()

{

  exam();

}

int exam(int a)

{

   ....

}

위와 같은 코드가 있을 때, 컴파일러에 따라서는 exam함수를 찾을 수 없다는 오류를 뱉는다.

코드를 여러번 보는게 아니라, 단 한 번만 쭈욱 내려가며 읽어 컴파일 하는 방식의 경우가 그렇다.


exam이 정의되기도 전에 호출해서 문제가 되는 것이다.

그런 경우 함수의 원형을 미리 정의해줄 수 있다.


int exam(int a);

int exam(int);

위의 두 줄이 각각 그 예이다. 두 번째 구문은 인수의 자료형만 밝히는 방식이다.


헤더파일이 위와 같은 원형을 포함하고 있는 파일이다.


8. 모듈 분할 컴파일

코드 출처 http://soen.kr/lecture/ccpp/cpp1/6-2-4.png

함수가 짱많으면 하나의 .c 파일에 때려박기 좀 그러니까 여러개로 나눠서 컴파일한다.

그리고 나서 컴파일한 결과를 이렇게 저렇게 잘 엮어서 하나의 프로그램으로 만든다.

이런 방법이 모듈 분할 컴파일, 혹은 다중 모듈 컴파일 이라고 소개가 되어있다.


vs community 2015 기준으로 다음과 같이 할 수있다.

파일 명 : main함수가 있는 파일.c

#include <stdio.h>
#include "Max함수의 원형.h"

void main()
{
 int a, b, m;

 scanf_s("%d%d", &a, &b);
 m = Max(a, b);
 printf("%d", m);
}


파일 명 : Max함수가 있는 파일.c

int Max(int a, int b)
{
 if (a>b)
 {
  return a;
 }
 else
 {
  return b;
 }
}


파일 명 : Max함수의 원형.h

int Max(int a, int b);

'C' 카테고리의 다른 글

8회차 : 기억부류(스토리지 클래스)  (0) 2017.02.08
7회차 : 함수 호출 방식, 전처리기  (0) 2017.02.07
5회차 : 기타 연산자, 연산 규칙  (0) 2017.02.02
4회차 : 산술,논리 연산자  (0) 2017.01.31
3회차 : 제어문  (0) 2017.01.26
Comments