자주 사용하는 짤막한 코드들을 inline화 시켜둘때도 있고,
SAFE_DELETE처럼 전처리기에게 #define을 통해 매크로함수로 만들어버리기도 합니다.
둘의 차이가 궁금해서 알아보았습니다
매크로 함수
예) #define Num 5
와 비슷하게, Num이 5로 치환되는거와 비슷하게 구동
예) #define 함수이름(인자) 치환
디파인 뒤에 들어오는 함수이름(인자)에 무엇을 넣어줄경우 후자의 행동을 취해서 치환됨
어느 형이 들어와도 바로 치환을 시켜버리기에 typesafe하진 않음
인라인 함수
일반적인 함수 호출시엔 호출 위치를 기억해두고, 함수가 있는곳을 찾아서 다녀와야 함
앞에 inline을 붙은 인라인 함수를 쓸 경우 그 자리에서 바로 인라인화된 식을 사용해 처리됨
인라인은 근데 앞에 inline 붙여놔도 컴파일러가 알아서 뱉어내기도 함.
반대로 인라인화 시켜둬야 할거같은걸 알아서 하기도 함.
둘 차이
매크로 함수는 컴파일 전에 전처리기에서 처리됨
인라인함수는 매크로와 달리 컴파일러가 처리하기에 타입을 확인함.
단순치환이 아닌 함수처럼 작동하기에 디버깅에 더 용이하며 더 타입체크땜시 안전함
요약
매크로 함수를 요약해서 말하자면 여러번 사용될 식을
#define을 이용해 전처리기에게 디파인뒤에 들어오는 인자를 뒤엣걸로 치환을 해두게 하는것
인라인 함수를 요약해서 말하자면 일반함수와 비슷하게 작동을 하나
함수호출처럼 기존 위치로 리턴포인트를 지정해두고 함수에 갔다오는게 아닌
치환을 해서 바로 사용함. 컴파일러 단계서 처리하고, 타입 정의 및 확인이 있음.
둘다 장단점이 있으니 필요상황에 알아서 쓰는걸로.
'정보들 > C,C++ 관련' 카테고리의 다른 글
C와 C++차이 (0) | 2020.11.20 |
---|---|
enum VS enum class (0) | 2020.06.23 |
C++의 캐스팅 4가지 (0) | 2020.06.23 |
bool vs BOOL? (0) | 2020.06.23 |
push_back vs emplace_back (0) | 2020.06.23 |