본문 바로가기
[공부]/C++

[C++] 기본 정리 11 - C++ 함수(인라인 함수)

by 개발꿈냥무 2024. 2. 22.

C++ 함수 호출 과정

  1. 우선 스택(stack)에 함수로 전달할 인수와 (호출이 끝난 뒤 돌아갈) 반환 주소값을 저장
  2. 프로그램 제어가 함수의 위치로 넘어와, 함수 내에 선언된 지역 변수도 스택에 저장
  3. 함수의 모든 코드 실행 -> 실행이 모두 끝나면 반환값을 넘겨 줌
  4. 프로그램 제어가 스택에 저장된 반환 주소값으로 이동하여, 스택에 저장된 함수 호출 정보를 제거

 

 

함수 실행 시간이 매우 짧다면, 함수 호출에 걸리는 시간이 부담될 수 있음 (함수 실행 시간이 오래 걸린다면 부담X지만)

 

인라인 함수 (inline function)

  • 호출될 때 일반적인 함수의 호출 과정을 거치지 않고, 함수의 모든 코드를 호출된 자리에 바로 삽입하는 방식
  • 함수 호출에 걸리는 시간은 절약되나, 함수 호출 과정으로 생기는 여러 이점을 포기하게 됨
  • 코드가 매우 적은 함수만 인라인으로 선언하는 것이 좋음
  • 인라인 함수에서는 재귀 호출이 허용되지 않음

 

인라인 함수 선언

inline 키워드 : 함수 원형이나 함수 정의 중 어느 한 쪽에만 표기해도 됨 (양쪽 다 표기해도 괜찮)

// 문법
inline 함수원형
lnline 함수정의

// 예시
inline int Sub(int x, int y) { return x-y; }
lnline void Print(int x) { cout << "결과는 " << x << "입니다."; }

 

 

 


매크로 함수와 인라인 함수

 

매크로 함수

  • #define 선행처리 지시문에 인수로 함수의 정의를 전달함으로써, 함수처럼 동작
    • vs. 인라인 함수 : 단순 치환이 아닌, 함수의 모든 코드를 호출된 자리에 인라인 코드로 삽입하는 방식
  • 일반 함수와는 달리 단순 치환만 해주므로, 일반 함수와 똑같은 방식으로 동작하지는 않음
  • 매크로 함수를 일반 함수처럼 사용하기 위해선, 모든 인수를 괄호로 감싸야만 함
int x = 5;

#define SQR(X) X*X
SQR(10); -> 100
SQR(x + 3); -> 23 (의도한 결과와 다름)

#define SQR(X) ((X)*(X))
SQR(x + 3); -> 64 (의도한 결과와 같음)

 

 

 

 


참고)

코딩의 시작, TCP School

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com