매크로 함수란

  • 실제 함수는 아니나 함수처럼 인자를 받아 동작할 수 있게끔 정의해놓은 구문
#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

+ Recent posts