[C++] 인라인(inline)함수 와 매크로(define)함수

2022. 6. 24. 13:21♣ C++

이번 포스팅에선 인라인 함수와 매크로 함수에 대해 알아보도록 하겠습니다.

인라인 함수: 모든 코드를 호출된 자리에서 바로 삽입해서 연산을 진행합니다.

매크로 함수: #define 선행처리 지시문에 함수를 정의하여 동작합니다.

 

개발 환경 : VSCode, Windows 10

 

 

 

 

 

기본 개발 세팅은 다음과 같습니다.

#include <iostream>
#include <string.h>
#include <string>
using namespace std;

int main()
{
	return 0;
}

 

 

 

 

 

📌 인라인 함수

 

인라인 함수가 필요한 이유가 뭘까요?

그 이유는 함수 호출 과정에 있습니다. 본래 함수 호출은 다음과 같은 과정을 거칩니다.

(1) 함수 호출

(2) 스택에 매개변수+반환 주소값 저장

(3) 프로그램 제어가 함수 위치로 날아와 지역 변수 저장

(4) 코드 실행

(5) 반환 값 넘기고 다시 본문으로 이동

(6) 함수 호출 정보 제거

 

오래걸리는 함수라면 이 과정들이 딱히 크게 느껴지지 않습니다. 하지만 아주 짧은 코드라면 이 과정조차 시간 낭비가 될 것입니다. 위의 복잡한 과정 없이, 해당 함수의 모든 코드를 호출된 자리에서 바로 삽입하는 것이 인라인 함수입니다.

 

 

인라인 함수는 다음과 같이 정의&선언 합니다.

inline 타입 함수이름(인수){return};

inline int Add(int a, int b){return a + b;};

인라인 함수는 원형, 정의를 딱히 구분하지 않습니다. 간단하기에 한번에 바로 선언해줍니다.

 

 

인라인 함수 활용 예시입니다.

inline int Add(int a, int b){return a + b;};

// main() 함수 본문
int main()
{   
    int a = 30, b = 40;
    cout << "Add's result : " << Add(a, b) << endl; 
}

함수를 활용하는 방법 자체는 다른 함수들과 다를바 없습니다.

 

 

결과

Add's result : 70

 

 

 

 

📌 매크로 함수

 

매크로 함수는 #define 선행처리 지시문에 인수로 함수를 전달하여 동작합니다.

#define 함수이름(인수)(함수 기능 정의)


#define Add(X)((X)+(X))

매크로 함수는 인수들을 모두 괄호로 덮어줘야 합니다.

만약 덮지 않을 경우, 오류들이 발생합니다.

 

 

매크로 함수 활용 코드입니다.

#include <iostream>
#include <string.h>
#include <string>
using namespace std;
#define Add(X)((X)+(X))

// main() 함수 본문
int main()
{   
    int a = 30, b = 40;
    cout << "Add's result : " << Add(a) << endl; 
}

#define 선행처리 지시문에 함수를 정의하고, main() 함수에서 그대로 쓴 것을 볼 수 있습니다.

 

 

결과

Add's result : 60

 

 

 

 

지금까지 인라인 함수와 매크로 함수에 대해 알아보았습니다.

다음 포스팅에선 함수 범위에 대해 알아보겠습니다.

고생하셨습니다.