본문 바로가기
Language/C++

인라인 함수와 매크로 함수

by W00gie 2020. 11. 20.

 인라인 함수와 매크로 함수 모두 (실행 파일의) 크기에 불리하고 속도에 유리하다는 특징을 가지고 있다.
하지만 인라인 함수는 이에 더해 추가적인 이점을 가진다.

  • 타입을 확인하기에 산술 변환이 잘 처리된다.
  • 지역 변수를 사용할 수 있다.


 매크로 함수의 경우 전처리기능을 이용한 '단순 치환'의 역할만을 하기 때문이다. 컴파일 과정에서 인라인 함수와 달리 매크로 함수는 데이터 타입에 관한 문제를 발생할 수 없다.
 이러한 점으로 미루어 보아 매크로 함수보다 컴파일러가 처리하는 인라인 함수가 더욱 상위호환의 역할을 할 수 있다고 볼 수 있다. 실제로 C++에서도 매크로 함수보다 인라인 함수 사용을 권장한다.

다만 아무리 inline 키워드를 붙여 인라인 함수로 선언하려 해도 불가능한 경우가 있다.
실제 인라인 함수가 될 것인가 아닌가는 컴파일러가 결정하기 때문이다.

인라인 함수화가 불가능한 케이스들은 다음과 같다 (출처 : C++ 트레이닝 , 김상형)

 

  • 재귀호출함수
  • 포인터로 지목된 함수
  • 함수의 길이가 너무 긴 함수

반대로 인라인 함수로 선언하지 않아도 자동으로 인라인화 되는 경우도 있다.

최신 컴파일러의 경우 이러한 경우를 보다 정확하게 선별하기 때문에 인라인 키워드를 엄격히 준수할 필요성은 적다.