편집 기록

편집 기록
  • 프로필 유동욱님의 편집
    날짜2018.05.08

    c 파일분할과 매크로


    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;
    }
    ---------------------------------------------------------------------------
    
  • 프로필 원동규님의 편집
    날짜2018.05.06

    c 파일분할과 매크로


    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;
    }
    ---------------------------------------------------------------------------