C++ 함수 호출 과정
- 우선 스택(stack)에 함수로 전달할 인수와 (호출이 끝난 뒤 돌아갈) 반환 주소값을 저장
- 프로그램 제어가 함수의 위치로 넘어와, 함수 내에 선언된 지역 변수도 스택에 저장
- 함수의 모든 코드 실행 -> 실행이 모두 끝나면 반환값을 넘겨 줌
- 프로그램 제어가 스택에 저장된 반환 주소값으로 이동하여, 스택에 저장된 함수 호출 정보를 제거
함수 실행 시간이 매우 짧다면, 함수 호출에 걸리는 시간이 부담될 수 있음 (함수 실행 시간이 오래 걸린다면 부담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 (의도한 결과와 같음)
참고)
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
'[공부] > C++' 카테고리의 다른 글
[C++] 기본 정리 13 - 클래스, 객체 지향 프로그래밍, this 포인터 (1) | 2024.02.24 |
---|---|
[C++] 기본 정리 12 - C++ 범위(유효 범위, 연결, 네임스페이스) (0) | 2024.02.22 |
[C++] 기본 정리 10 - C++ 함수(참조자, 디폴트 인수, 오버로딩) (0) | 2024.02.22 |
[C++] 기본 정리 9 - 함수, 재귀 호출, 함수 포인터 (0) | 2024.02.20 |
[C++] 기본 정리 8 - 구조체, 공용체, 열거체 (0) | 2024.02.20 |