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