C and C++

[C++] #define은 지양하자

개발새발 2018. 5. 6. 16:37
반응형

c/c++에서 자주 사용 되는 #define 주로 간단한 함수나 고정 된 값이나 고정된 문자열을 만들때 사용 된다.

그러나 #define은 다음과 같은 단점이 존재한다.


1. 컴파일 후 기호 테이블에 들어가지 않기 때문에 디버깅의 어려움

2. 매크로함수의 경우 의도하지 않은 결과가 나올 수 있음

3. 타입 안전성이 떨어짐


따라서 가능하다면 #define을 지양하고 다음과 같은 방법으로 코드를 작성하는게 좋다.


<문자열>

#define TEST "TEST" 

을 아래와 같이 변경해서 사용한다.

  1. const char * const Test = "TEST";
  2. const std::string StringTest = "TEST";


<상수>

#define MAX 100

을 아래와 같이 변경해서 사용한다.

  1. 1.const int Max = 100;
  2. 2.enum값 활용 (#define처럼 메모리가 할당되지 않지만 기호테이블에 포함됨 메모리절약이 필요한 임베디드 환경에서 유용함)

class myClass{

private:

    enum{

        enumMAX = 100

    };

    static const int myMax = 100;

    

    int arr[enumMAX];

    int arr2[myMax];

};


<함수>

매크로함수 -> (인라인) 함수 템플릿


#define COMPMAX(a,b) ((a) > (b) ? (a) : (b))

을 아래와 같이 변경해서 사용한다.

    template<typename T>

    inline T compMax(const T a,const T b){

        return (a>b)? a: b;

    }


    반응형