본문 바로가기
Technical/Organize

[Technical Organize] Effective C++_#define

by song.ift 2022. 12. 28.

#defnie 상수는 다음과 같은 단점이 있다.

 

1) 전처리기에서 처리된다. 즉 컴파일러에서 제어할 수 없으니 데이터 타입 검증이 되지 않는다.

특히 매크로 인자의 경우, #define은 인자의 타입을 지정하지 않기 때문에 의도하지 않은 결과를 만들어내기도 한다. 예를 들면, 소수로 (float)받으려는 의도였는데, 호출하는 쪽에서 정수 (int)로 입력해서, 4/3이 1의 결과가 나오는 일이다.

왠만하면, 컴파일러가 이해할 수 있는 형태로 코드를 작성하는게 안전하다.

 

2) 매번 코드가 복사되기 때문에, 실행 코드 크기가 늘어난다.

매크로 함수는 모두 치환으로 바뀌기 때문에 inline함수와 유사하게 동작한다. 다만, 이를 의도한 거라면 차라리 inline을 쓰는게 낫다.

#define 매크로는 인자 개수와 타입, 반환 타입을 전혀 신경 쓰지 않는 데다가, 상속과 재정의가 되지 않는다. 또한 inline이기 때문에, 치환이 되는 곳마다 코드가 copy/paste 된다.

#define 매크로를 매크로의 매크로 형태로 작성하다보면, 자기도 모르게 대량의 코드가 생성된다

 

댓글