C++

[C++] 매크로 함수와 inline키워드

programmer-faust 2025. 9. 3. 11:07
  • 순서
    1. 매크로 함수란?
    2. 매크로 함수의 장단점
    3. inline 키워드란?
    4. inline 키워드의 장단점
    5. 매크로 함수와 inline 키워드의 차이
  • 매크로 함수란?
    1. 전처리기 지시문 #define을 사용해 정의함
    2. 컴파일 전에 코드가 단순 치환됨.
    3. 특징
      • 텍스트 치환이므로 타입 체크가 없음
      • 컴파일러가 관여하지 않음
      • 함수 호출이 없으므로 호출 오버헤드가 없음
  • 매크로 함수의 장단점
    1. 장점
      • 호출 오버헤드가 전혀 없음
      • 조건부 컴파일이나 플랫폼별 코드 분기 등 전처리기 기능과 결합 가능
    2. 단점
      • 타입 안전성 없음 > 실수로 잘못된 타입을 넣어도 컴파일 오류가 안 날 수 있음
      • 디버깅 어려움 > 에러가 치환된 코드에서 발생
      • 다중 평가 문제
      • 스코프 제한 없음 > 이름 충돌 가능
  • inline 키워드란?
    1. 함수 호출 시 발생하는 오버헤드를 줄이기 위해, 해당 함수를 호출하는 지점에 함수의 코드를 직접 삽입하도록 컴파일러에 제안하는 키워드.
    2. 주로 코드가 짧고 자주 호출되는 간단한 함수(Getter, Setter )에 사용하는 것이 효과적
    3. 특징
      • 컴파일러가 실제로 inline으로 처리할지 결정 > 항상 처리되는 것은 아님
      • 타입 체크와 스코프 규칙 준수
      • 디버깅 가능 > 일반 함수처럼 스택 추적 가능
      • 다중 정의 허용 > inline 함수는 헤더 파일에서 여러 번 정의 가능, 링크 시 중복 방지
  • inline 키워드의 장단점
    1. 장점
      • 타입 안전, 범위 안전
      • 매크로에 비해 디버깅과 유지보수 쉬움
      • 다중 정의 가능 > 헤더 파일에서 정의 가능
      • 함수처럼 동작하지만 호출 오버헤드를 줄일 수 있음
    2. 단점
      • 코드 크기 증가 가능 > 지나치게 큰 함수에 inline 사용 시
      • 최종 inline 여부는 컴파일러 결정 > 항상 호출 오버헤드 제거되는 것은 아님
      • 재귀 함수는 inline 적용이 어려움
  • 매크로 함수와 inline 키워드의 차이
비교 매크로 함수 inline 키워드
정의 방식 전처리기 치환 컴파일러 힌트, 실제 함수
타입 체크 없음 있음
스코프 없음 있음
디버깅 어려움 가능
다중 평가 문제 있음 없음
다중 정의 불가능 가능
호출 오버헤드 없음 보장되지 않지만 대부분 제거 가능
최적화 단순 치환 컴파일러 최적화 가능
  • 매크로 함수는 전처리기 #define으로 정의되어 컴파일 전에 단순 텍스트 치환이 일어나므로, 타입 검사와 스코프 규칙이 없고 다중 평가 등의 위험이 있음.
  • inline 함수는 컴파일러에게 함수 호출 대신 코드 삽입을 힌트하는 일반 함수로, 타입이 안전하고 스코프 규칙을 따르며 디버깅과 유지보수가 쉬움.
  • inline 함수는 헤더에서 다중 정의가 가능하지만, 매크로 함수는 그렇지 않음

'C++' 카테고리의 다른 글

[C++] 오버로딩과 오버라이딩  (0) 2025.09.03
[C++] 바인딩  (0) 2025.09.03
[C++] 가상 함수  (0) 2025.09.03
[C++]const 키워드  (0) 2025.09.03
[C++]static 키워드  (0) 2025.09.03