본문 바로가기

프로그래밍 언어/C

C언어 상수와 매크로, 차이점과 사용 사례

C언어 상수와 매크로, 차이점과 사용 사례

C언어에서 값을 고정하고 반복적으로 사용하는 방법에는 상수(const)매크로(#define)라는 두 가지 주요 방법이 있습니다. 비슷해 보이지만 동작 방식, 처리 시점, 디버깅의 용이성 등 여러 면에서 큰 차이를 보입니다. 이 글에서는 각 기법의 개념과 특성을 비교 분석하고, 실제 코드에서 어떻게 선택하고 활용할지에 대한 방향성을 제시합니다.

 

 

목차

  1. const란 무엇인가?
  2. 매크로란 무엇인가?
  3. const와 매크로의 차이점
  4. const를 사용하는 적절한 상황
  5. 매크로가 유리한 경우
  6. 자주 하는 실수와 베스트 프랙티스
  7. 요약 및 선택 가이드

 

1. const란 무엇인가?

const는 변수의 값을 변경할 수 없게 만드는 키워드입니다. 즉, 컴파일 타임에 타입 검사와 함께 고정된 값을 가지는 변수를 선언할 수 있습니다.

const int MAX_SIZE = 100;
  • 타입 안전성을 보장
  • 디버깅이 쉬움
  • 함수 인자 보호에 유용

 

 

 

2. 매크로란 무엇인가?

매크로는 전처리기 지시문(preprocessor directive)을 통해 컴파일 전에 소스코드를 치환하는 방식입니다. #define 키워드를 사용합니다.

#define MAX_SIZE 100
  • 컴파일 전 텍스트 치환
  • 타입 정보 없음
  • 코드 최적화에 따라 위험성 존재

 

 

 

3. const와 매크로의 차이점

항목 const 매크로
처리 시점 컴파일 타임 전처리기 단계
타입 검사 있음 없음
디버깅 정보 유지됨 치환 후 사라짐
메모리 점유 있을 수 있음 없음

 

 

 

4. const를 사용하는 적절한 상황

const는 다음과 같은 경우에 매우 유용합니다:

  • 함수 인자의 수정 방지
  • 타입 안정성을 확보하고자 할 때
  • 값을 디버깅하거나 참조할 필요가 있을 때
  • 포인터와 함께 사용할 때 명확한 의미 전달 가능

 

 

 

 

5. 매크로가 유리한 경우

다음과 같은 경우에는 #define 매크로가 더 간단하고 효율적일 수 있습니다:

  • 조건부 컴파일에 사용할 경우
  • 헤더 파일에서 여러 상수를 공통 정의할 경우
  • 성능에 매우 민감한 코드에서 인라인화된 상수로 사용할 때

 

 

 

6. 자주 하는 실수와 베스트 프랙티스

실수:

  • 매크로에 괄호를 사용하지 않아 우선순위 문제 발생
  • const 포인터의 방향을 잘못 이해하고 복사 시 오류 발생
  • 디버깅 시 매크로 상수가 표시되지 않아 원인 파악 어려움

베스트 프랙티스:

  • 가능하면 const를 기본으로 사용
  • 매크로 상수에는 반드시 괄호 감싸기
  • 매크로 대신 enum도 고려

 

 

 

7. 요약 및 선택 가이드

const는 타입 안전성과 디버깅, 유지 보수에 강점이 있는 반면, 매크로는 텍스트 치환의 유연성과 컴파일 전 처리가 필요한 상황에 적합합니다.

결론적으로:

  • 일반 상수 값const
  • 조건부 컴파일, 플랫폼 구분#define
  • 복잡한 연산이 필요 없는 값#define도 괜찮지만 주의해서 사용

C언어의 기본에 충실하되, 상황에 따라 전략적으로 const와 매크로를 사용하는 능력이 보다 깔끔하고 유지보수 가능한 코드로 나아가는 지름길입니다.