본문으로 바로가기

[C언어] 파일별 함수 모듈 만들기

category C 2014. 5. 7. 13:55

전처리기(Preprocessor)

원본파일 -> Preprocess -> Compile -> 목적파일 -> Link -> 실행파일

 

#에 관련된 부분은 컴파일하기 이전에 전처리기에 의해 처리된다.

예를 들어

#include <stdio.h>

라고 쓰면 stdio.h 파일을 원본파일에 포함시키는 역할을 하며,

 

#define PI 3.141592f

void main()

{

 

    float fRadius;

    scanf("%f", &fRadius);

    float fAreaOfCircle = PI * fRadius * fRadius;

    printf("Area of circle = %f\n", fAreaOfCircle);

}

라고 쓰면 전처리기에 의해서 아래와 같이 바뀐다.

    float fAreaOfCircle = 3.141592f  * fRadius * fRadius;

//---------------------------------------------

#define ERROR_TEST

 

#ifdef ERROR_TEST

    printf("에러가 있습니다.");

#endif

//---------------------------------------------

#define ERROR_TEST

 

#ifndef ERROR_TEST

    printf("에러가 있습니다.");

#endif

//---------------------------------------------

 

 

파일별 함수 모듈 만들기

--> 함께 실습 하기로 한다.

 

<방법1> 

#include <stdio.h>

void PrintMenu()

{

    printf("===========\n");

    printf("1. +\n");

    printf("2. - \n");

    printf("3. *\n");

    printf("4. /\n");

    printf("5. %%\n");

    printf("6. x^y\n");

    printf("0. 종료\n");

    printf("===========\n");

}

int Modulo(int iNum1, int iNum2)

{

    return iNum1 % iNum2;

}

int Add(int iNum1, int iNum2)

{

    return iNum1+iNum2;

}

int Subtract(int iNum1, int iNum2)

{

    return iNum1-iNum2;

}

int Multiply(int iNum1, int iNum2)

{

    return iNum1*iNum2;

}

float Divide(int iNum1, int iNum2)

{

    if (0 == iNum2 )

    {

        printf("0으로 나눌수 없습니다.\n");

        return -1.0f;

    }

    return (float)iNum1/(float)iNum2;

}

int Pow(int iNum1, int iNum2) // x^y 2^3 == 2*2*2

{

    int iResult = 1;

    for (int i = 1; i <= iNum2; ++i)

    {

        iResult = iResult * iNum1;

    }

    return iResult;

}

void main()

{

    ....

}

#include <stdio.h>

#include "MyLib.h"

void main()

{

    ....

}

 

함수 부분은 MyLib.h라는 파일을 만들어

#include "MyLib.h" // MyLib.h 파일을 포함시킨다.

사용자가 만든 파일을 포함 시킬 때는 "" 기호를 쓰며,

컴파일러가 제공하는 파일을 포함 시킬 때는 <> 기호를 쓴다. 

 

 

파일명 : MyLib.h

#ifndef _MYLIB_H_

#define _MYLIB_H_

 

void PrintMenu(){
    printf("===========\n");
    printf("1. +\n");
    printf("2. - \n");
    printf("3. *\n");
    printf("4. /\n");
    printf("5. %%\n");
    printf("6. x^y\n");
    printf("0. 종료\n");
    printf("===========\n");
}
int Modulo(int iNum1, int iNum2)
{
    return iNum1 % iNum2;
}
int Add(int iNum1, int iNum2) {
    return iNum1+iNum2;
}
int Subtract(int iNum1, int iNum2) {
    return iNum1-iNum2;
}
    int Multiply(int iNum1, int iNum2) {
    return iNum1*iNum2;
}
float Divide(int iNum1, int iNum2) {
    if (0 == iNum2 )
    {
         printf("0으로 나눌수 없습니다.\n");
         return -1.0f;
    }
    return (float)iNum1/(float)iNum2;
}
int Pow(int iNum1, int iNum2) // x^y  2^3 == 2*2*2
{
    int iResult = 1;
    for (int i = 1; i <= iNum2; ++i)
    {
        iResult = iResult * iNum1;
    }
    return iResult;
}

 

#endif

 

<방법2>

#include <stdio.h>


void PrintMenu();

int Add(int iNum1, int iNum2);

int Subtract(int iNum1, int iNum2);

int Multiply(int iNum1, int iNum2);

float Divide(int iNum1, int iNum2);

int Modulo(int iNum1, int iNum2);

int Pow(int iNum1, int iNum2);

헤더파일

-> MyLib.h

  

 

 

 

 

void main()

{

....

}

   

void PrintMenu()

{

printf("===========\n");

printf("1. +\n");

printf("2. - \n");

printf("3. *\n");

printf("4. /\n");

printf("5. %%\n");

printf("6. x^y\n");

printf("0. 종료\n");

printf("===========\n");

}

int Modulo(int iNum1, int iNum2)

{

return iNum1 % iNum2;

}

int Add(int iNum1, int iNum2)

{

return iNum1+iNum2;

}

int Subtract(int iNum1, int iNum2)

{

return iNum1-iNum2;

}

int Multiply(int iNum1, int iNum2)

{

return iNum1*iNum2;

}

float Divide(int iNum1, int iNum2)

{

if (0 == iNum2 )

{

printf("0으로 나눌수 없습니다.\n");

return -1.0f;

}

return (float)iNum1/(float)iNum2;

}

int Pow(int iNum1, int iNum2) // x^y 2^3 == 2*2*2

{

int iResult = 1;

for (int i = 1; i <= iNum2; ++i)

{

iResult = iResult * iNum1;

}

return iResult;

}

소스파일

-> MyLib.cpp

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include <stdio.h>

   

#include "MyLib.h"

 

void main()

{

....

}

   

 

파일명 : MyLib.h

#ifndef _MYLIB_H_

#define _MYLIB_H_

 

void PrintMenu();
int Modulo(int iNum1, int iNum2);
int Add(int iNum1, int iNum2);
int Subtract(int iNum1, int iNum2);
int Multiply(int iNum1, int iNum2);
float Divide(int iNum1, int iNum2);
int Pow(int iNum1, int iNum2);

 

#endif

 

 

파일명 : MyLib.cpp

#include "MyLib.h"

 

void PrintMenu(){
    printf("===========\n");
    printf("1. +\n");
    printf("2. - \n");
    printf("3. *\n");
    printf("4. /\n");
    printf("5. %%\n");
    printf("6. x^y\n");
    printf("0. 종료\n");
    printf("===========\n");
}
int Modulo(int iNum1, int iNum2)
{
    return iNum1 % iNum2;
}
int Add(int iNum1, int iNum2) {
    return iNum1+iNum2;
}
int Subtract(int iNum1, int iNum2) {
    return iNum1-iNum2;
}
    int Multiply(int iNum1, int iNum2) {
    return iNum1*iNum2;
}
float Divide(int iNum1, int iNum2) {
    if (0 == iNum2 )
    {
         printf("0으로 나눌수 없습니다.\n");
         return -1.0f;
    }
    return (float)iNum1/(float)iNum2;
}
int Pow(int iNum1, int iNum2) // x^y  2^3 == 2*2*2
{
    int iResult = 1;
    for (int i = 1; i <= iNum2; ++i)
    {
        iResult = iResult * iNum1;
    }
    return iResult;
}

<참조>

 

#ifndef _MYLIB_H_

#define _MYLIB_H_

 

void PrintMenu();
int Modulo(int iNum1, int iNum2);
int Add(int iNum1, int iNum2);
int Subtract(int iNum1, int iNum2);
int Multiply(int iNum1, int iNum2);
float Divide(int iNum1, int iNum2);
int Pow(int iNum1, int iNum2);

 

#endif

 

대신해서 아래와 같이 쓸 수도 있다. (MS Visual C++ 안에서만 가능, 비표준)

#pragma once

 

void PrintMenu();
int Modulo(int iNum1, int iNum2);
int Add(int iNum1, int iNum2);
int Subtract(int iNum1, int iNum2);
int Multiply(int iNum1, int iNum2);
float Divide(int iNum1, int iNum2);
int Pow(int iNum1, int iNum2);