c 파일분할과 매크로

조회수 705회

visual studio 2017 사용중입니다.

파일분할 할 때, 매크로를 어떻게 해야할지 몰라서 여쭤봅니다..

예시로 작성해본 소스입니다.

이 소스를 두 방법으로 분할했는데요.

어떤 방법이 더 나은 방법인지 잘 모르겠습니다.

그리고 해시코드에 계신 분들은 더 나은 방법을 알고 계실것 같아 질문 드립니다!

main함수 선언&정의 -> main.c

KeyEvent선언 -> KeyEvent.h

KeyEvent정의 -> KeyEvent.c

매크로 -> KEY_MACRO.h

위와 같이 파일분할을 했는데, 저는 두가지 방법이 나왔습니다.

**1번 방법:

Macro.h를 Main.c와 KeyEvent.c에 include했습니다.

2번 방법:

Macro.h를 KeyEvent.h에 include하고,

KeyEvent.h를 Main.c와 KeyEvent.c에 include 했습니다.**

1번과 2번중에 어떤방법이 더 나을까요?

다른 의견이 있다면 알려주세요 다른 방법도 궁금합니다!

저는 많은 사람들의 의견을 듣고싶습니다!

배우고 싶습니다! 코드가 마음에 들지 않는 부분이 있다면 지적해주세요!

이해를 돕기 위해 예시코드 아래에 두가지 방법으로 분할 한 소스를 작성해놨습니다.(꼭 보지 않으 셔도 됩니다.)

예시 코드(아래, 분할하지 않은 코드입니다.)

#include <stdio.h>
#include <conio.h>

//Macro
#define KEY_EXIT 0
#define KEY_NO_INPUT 1
#define KEY_PAUSE 2
#define KEY_MOVE 3
//Macro 끝

//KeyEvent함수
int KeyEvent()
{
    if(_kbhit)
    {
        switch(getch())
        {
        case 'P':
        case 'p':
            return KEY_PAUSE;
        case 'E'
        case 'e':
            return KEY_EXIT;
        case 'w':
        case 'a':
        case 's':
        case 'd':
            return KEY_MOVE;
        default:
            return KEY_NO_INPUT;
        }
    }
    return KEY_NO_INPUT;
}
//KeyEvent함수 끝

//Main함수
int main()
{
    int mode = KEY_NO_INPUT;
    while(mode = KeyEvent())
    {
        switch(mode)
        {
            case KEY_PAUSE:
                printf("pause\n");
                //일시정지 코드
            break;
            case KEY_MOVE;
                printf("move\n");
                //이동 코드
            break;
        }
            //여기에 mode값에 따라 코드 작성
    }
    return 0;
}
//Main함수 끝

.

.

.

1번. 파일 분할 예1(아래)

/*      Macro.h*/
#define KEY_EXIT 0
#define KEY_NO_INPUT 1
#define KEY_PAUSE 2
#define KEY_MOVE 3
---------------------------------------------------------------------------
/*      KeyEvent.h*/
int KeyEvent();
---------------------------------------------------------------------------
/*      KeyEvent.c*/
#include "Macro.h"

int KeyEvent()
{
    if(_kbhit)
    {
        switch(getch())
        {
        case 'P':
        case 'p':
            return KEY_PAUSE;
        case 'E'
        case 'e':
            return KEY_EXIT;
        case 'w':
        case 'a':
        case 's':
        case 'd':
            return KEY_MOVE;
        default:
            return KEY_NO_INPUT;
        }
    }
    return KEY_NO_INPUT;
}
---------------------------------------------------------------------------
/*      main.c*/
#include <stdio.h>
#include "Macro.h"
#include "KeyEvent.h"

int main()
{
    int mode = KEY_NO_INPUT;
    while(mode = KeyEvent())
    {
        switch(mode)
        {
            case KEY_PAUSE:
                printf("pause\n");
                //일시정지 코드
            break;
            case KEY_MOVE;
                printf("move\n");
                //이동 코드
            break;
        }
            //여기에 mode값에 따라 코드 작성
    }
    return 0;
}
---------------------------------------------------------------------------

.

2번. 파일 분할 예2(아래)

/*      Macro.h*/
#define KEY_EXIT 0
#define KEY_NO_INPUT 1
#define KEY_PAUSE 2
#define KEY_MOVE 3
---------------------------------------------------------------------------
/*      KeyEvent.h*/
#include "Macro.h"

int KeyEvent();
---------------------------------------------------------------------------
/*      KeyEvent.c*/
#include "KeyEvent.h"

int KeyEvent()
{
    if(_kbhit)
    {
        switch(getch())
        {
        case 'P':
        case 'p':
            return KEY_PAUSE;
        case 'E'
        case 'e':
            return KEY_EXIT;
        case 'w':
        case 'a':
        case 's':
        case 'd':
            return KEY_MOVE;
        default:
            return KEY_NO_INPUT;
        }
    }
    return KEY_NO_INPUT;
}
---------------------------------------------------------------------------
/*      main.c*/
#include <stdio.h>
#include "KeyEvent.h"

int main()
{
    int mode = KEY_NO_INPUT;
    while(mode = KeyEvent())
    {
        switch(mode)
        {
            case KEY_PAUSE:
                printf("pause\n");
                //일시정지 코드
            break;
            case KEY_MOVE;
                printf("move\n");
                //이동 코드
            break;
        }
            //여기에 mode값에 따라 코드 작성
    }
    return 0;
}
---------------------------------------------------------------------------

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)