반응형
c/c++에서 자주 사용 되는 #define 주로 간단한 함수나 고정 된 값이나 고정된 문자열을 만들때 사용 된다.
그러나 #define은 다음과 같은 단점이 존재한다.
1. 컴파일 후 기호 테이블에 들어가지 않기 때문에 디버깅의 어려움
2. 매크로함수의 경우 의도하지 않은 결과가 나올 수 있음
3. 타입 안전성이 떨어짐
따라서 가능하다면 #define을 지양하고 다음과 같은 방법으로 코드를 작성하는게 좋다.
<문자열>
#define TEST "TEST"
을 아래와 같이 변경해서 사용한다.
- const char * const Test = "TEST";
- const std::string StringTest = "TEST";
<상수>
#define MAX 100
을 아래와 같이 변경해서 사용한다.
- 1.const int Max = 100;
- 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;
}
반응형
'C and C++' 카테고리의 다른 글
[C++] 자원관리 Smart Pointer (shared_ptr) (0) | 2018.06.17 |
---|---|
[C++] 상속을 허용하는 Base 클래스의 소멸자는 반드시 가상(virtual) 소멸자로 선언 (0) | 2018.06.03 |
[C++] 기본으로 만들어지는 생성자,복사 생성자, 소멸자, 대입 연산자와 이를 금지하는 방법 (0) | 2018.05.26 |
[C++] 객체를 초기화 할때는 생성자 초기화 리스트를Initialize List) 사용하기 (0) | 2018.05.13 |
[C++] delete시 주의점 (0) | 2018.01.01 |