매크로 함수란
- 실제 함수는 아니나 함수처럼 인자를 받아 동작할 수 있게끔 정의해놓은 구문
#define ADD(a,b) a+b
문제점
- 단순 치환으로 동작하기 때문에 괄호를 잘 사용해주어야 함
#define MUL(a,b) a*b
#define MUL_SUCCESS(a,b) (a)*(b)
MUL(9 + 1, 19 + 1); //의도하지 않은 결과가 나올 수 있음
// 10 * 20 = 200을 기대했지만 9 + 1 * 19 + 1 = 29와 같은 경우
#, ##
- 매크로에서 위 두 연산자는 각각 문자열로 변환, 토큰 결합을 의미
#define TEST1(a,b) #a "+" #b
#define TEST2(a,b) a ## b
TEST1(123, 456) // "123+456"
TEST2(123, 456) // 123456
inline
- 함수의 오버헤드를 줄이기 위한 키워드
- 매크로와 마찬가지로 함수의 몸통부에 적힌 내용이 코드에 적히게 됨 -> 실행 파일이 커지게 됨
- 멤버함수의 경우 구현부를 헤더에서 다 적게 되면 자동으로 inline이 적힌 효과를 볼 수 있으며 요즘 컴파일러가 대체로 알아서 해주기 때문에 신경 쓸 만한 키워드는 아님
- inline을 적었다고 무조건 inline이 되는 것이 아닌 컴파일러가 알아서 처리하게 되면 아닐 수 있음
- __forceinline을 통해 프로그래머가 inline을 강제할 수도 있음 ( 사용하기 위한 조건이 까다로우며, 무분별한 사용은 좋지 않음)
inline vs 매크로
- 둘의 동작엔 차이가 없다 할 수 있으나
- inline : 컴파일 타임에 처리, 매크로 : 전처리 타임에 처리
'C++ > 키워드 정리' 카테고리의 다른 글
키워드 정리 [6] - 함수 호출 규약 (0) | 2023.12.01 |
---|---|
키워드 정리 [5] - 동적 할당 (1) | 2023.12.01 |
키워드 정리 [4] - 구조체 (1) | 2023.12.01 |
키워드 정리 [2] - const (1) | 2023.12.01 |
키워드 정리 [1] - 변수 (0) | 2023.12.01 |