ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 매크로 함수
    Coding/Tip !! 2018. 10. 3. 07:23

    매크로(define)
    자주 사용하게 되는 상수 등을 문자형식으로 나타내어 편리하게 사용하게 하는 것이다.

    매크로 상수는 컴파일 전에 전처리기에 의해서 미리 치환되며 변수이용보다 처리속도가 빠르다.

    #define을 사용하며 매크로 정의 시 앞부분에 써주면된다.

    보통 대문자로 많이 정의하며 가독성을 높여주고 유지보수를 편하게 해준다.


    Tip!

    #은 전처리기의 의미로 컴파일,빌드 하기 전에 진행한다는 의미이다.


    매크로 함수

    [형식]

    #define 매크로 상수이름 문자열 or 숫자

    #define 매크로상수이름(인자) 수식 or 문자열 or 숫자



    아래는 매크로 함수예시이다. 삼항연산자를 이용하였다.

    삼항연산자 -> (조건식) ? (참 일때) : (거짓 일때) 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>

    using namespace std;
     
    #define MAX(a, b) ((a > b) ? a : b) -> 삼항연산자를 괄호로 감싸야 사용가능함 없으면 에러발생
     
    //#define MAX(a, b) (((a) > (b)) ? (a) : (b)) -> 위와같음, 단순히 숫자가아닌 1+3같이 뭔가 수식이 들어가게되면 
    //                                               제대로 값이 나오지 않을 수 있기 때문에 괄호를 더 넣어준 경우임
    int main(){
        cout << MAX(7,2<< endl;
        cout << MAX(5+8*7,111<< endl;
        return 0;
    }








    매크로 함수 사용 시 주의사항!!

    아래와 같은 코드가 있다.


    main.cpp

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <iostream>
    #include "test.h"
     
    #define MAC
     
    using namespace std;
     
    void testname();
     
    int main()
    {
        testname();
        return 0;
    }




    test.h

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
     
    using namespace std;
     
    void testname()
    {
        #ifdef MAC
            cout << "PRO" << endl;
        #else
            cout << "AIR" << endl;
        #endif
     
    }



    이 경우 결과는 예상과 다르게  "PRO"가 출력되지 않는다.

    MAC이 이미 main.cpp에 #define이 되어있는데도 불구하고 "AIR"가 출력된다.

    그 이유는 매크로의 효력 범위가 정의된 파일에서만 가능하기 때문이다.

    반응형

    'Coding > Tip !!' 카테고리의 다른 글

    자료형 크기와 범위 코딩하기  (0) 2018.10.03
    변수 초기화 방법  (0) 2018.10.03
    Header Gurad  (0) 2018.10.02
    c++ 동적 배열 사용 vector  (0) 2018.09.19
    C++ auto 키워드 사용하기  (0) 2018.09.19

    댓글

Designed by Tistory.