[C++] 1-4. 인라인(inline) 함수

2024. 9. 8. 17:36·공부/C++
728x90

*윤성우의 열혈 C++ 프로그래밍 교재로 학습하며 정리하였습니다.

매크로 함수

매크로 함수의 장점

-> 일반적인 함수에 비해서 실행 속도의 이점이 있다.

 

매크로 함수의 단점

-> 정의하기가 어렵다.

-> 복잡한 함수를 매크로의 형태로 정의하는데 한계가 있다.

매크로 함수의 예시

#include<iostream>
#define SQUARE(x) ((x) * (x))

int main(void) {
	std::cout << SQUARE(5) << std::endl;
	return 0;
}

 

#include<iostream>

int main(void) {
	std::cout << ((5)*(5)) << std::endl;
	return 0;
}

// 함수의 몸체 부분이 함수의 호출문을 대신한다.

바로 위의 예제와 같이 함수의 몸체 부분이 함수 호출 문장을 완전히 대체했을 때

함수가 인라인화 되었다

라고 표현한다.

 

C++에서는 매크로 함수의 장점을 유지하면서, 일반 함수처럼 정의할 수 있다.

 

C++기반의 인라인 함수의 정의 방법

#include<iostream>

inline int SQUARE(int x) { //인라인 함수의 정의
	return x * x;
}

int main(void) { 
	std::cout << SQUARE(5) << std::endl;
	std::cout << SQUARE(12) << std::endl;
	return 0;
}

매크로를 이용한 함수의 의인화는 전처리기(#define 등)에 의해서 처리되지만

키워드 inline을 이용한 함수의 인라인화는 컴파일러에 의해서 처리가 된다.

따라서 컴파일러는 함수의 인라인화가 오히려 성능에 해가 된다고 판단할 경우,

인라인 키워드를 무시해버리기도 한다;;

또한 필요한 경우 일부 함수를 임의로 인라인 처리하기도 한다;;;

매크로 함수에는 있지만, 인라인 함수에는 없는 장점

#define SQUARE(x) ((x)*(x))
//매크로 함수는 자료형에 의존적이지 않다.

std::cout<< (12); //int형 함수 호출
std::cout<< (3.15); //double형 함수 호출
//위의 함수 호출 문장은 아래와 같이 변환이 이루어진다.

std::cout << ((12)*(12));
std::cout << ((3.15)*(3.15));
//따라서 어떠한 경우에도 데이터의 손실이 발생하지 않는다.

//하지만! 다음과 같이 정의된 인라인 함수는
inline int SQUARE(int x) {return x*x}
//int형 기반으로 정의된 함수이기 때문에 아래와 같은 상황에서 데이터 손실이 발생!!
std::cout << SQUARE(3.15); // 3 * 3 = 9가 출력된다.

위와 같은 문제를 해결하기 위해서 C++의 템플릿이라는 것을 이용하면

매크로 함수와 마찬가지로 자료형에 의존적이지 않는 함수가 완성된다...

템플릿 예시

#include <iostream>

template <typename T>
inline T SQUARE(T x) {
	return x * x;
}

int main(void) {
	std::cout << SQUARE(5.5) << std::endl;
	std::cout << SQUARE(12) << std::endl;
	return 0;
}

템플릿에 관해서는 이후에 자세하게 다시 설명하겠다.

 

728x90

'공부 > C++' 카테고리의 다른 글

[C++] 2-1. C언어 복습  (0) 2024.09.11
[C++] 1-5. 이름 공간  (0) 2024.09.09
[C++] 1-3. 매개변수의 디폴트 값  (0) 2024.09.08
[C++] 1-2. 함수 오버로딩  (1) 2024.09.08
[C++] 1-1. 입력과 출력  (0) 2024.09.05
'공부/C++' 카테고리의 다른 글
  • [C++] 2-1. C언어 복습
  • [C++] 1-5. 이름 공간
  • [C++] 1-3. 매개변수의 디폴트 값
  • [C++] 1-2. 함수 오버로딩
knhoo
knhoo
  • knhoo
    &*
    knhoo
  • 전체
    오늘
    어제
    • 전체 (144) N
      • Unity 개발일지 (20)
        • [Unity2D]졸업프로젝트 (17)
        • [Unity3D]VR프로젝트 (2)
      • 공부 (119) N
        • 게임 수학 (1)
        • 부트캠프 (13) N
        • C++ (39)
        • Unity & C# (8)
        • 데이터베이스 (2)
        • 컴퓨터비전 (0)
        • 컴퓨터구조 (0)
        • python (7)
        • BAEKJOON (38)
        • 개발 (2)
        • 자료구조 (9)
      • 일상 (2)
  • 블로그 메뉴

    • Github
    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 📖README
  • 인기 글

  • 태그

    티스토리챌린지
    Python
    야핏무브
    unity2d
    C++
    구간합
    캐시워크
    백준 #python
    Cpp
    til
    unity
    패널파워
    머니워크
    멋쟁이사자처럼후기
    비트버니
    c#
    백준
    오블완
    앱테크
    자료구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
knhoo
[C++] 1-4. 인라인(inline) 함수
상단으로

티스토리툴바