00 개요
- inline 함수가 뭔지 알기 위해 매크로 함수도 알아야 할 것 같아 같이 정리함
01 Macro 함수
- C 언어에서는 #define에 함수를 정의함으로서 함수처럼 동작하는 매크로 (aka 매크로 함수) 생성 가능
- 참조: 2024.06.25 - [C] - Macro (매크로)
1. 정의
- 매크로를 이용하여 함수의 역할을 대신 함 → 치환substitute함
- 파라미터를 받기 가능, 반환 가능
2. 문법
#define 매크로함수명(인자) 치환내용
- 예시)
#include <stdio.h> // printf() 사용
// #define 매크로함수명(인자) 명령어
#define MY_PLUS(A, B) ((A)+(B))
#define MY_MINUS(A, B) ((A)-(B))
#define MY_MULTIPLY(A, B) ((A)*(B))
#define MY_PRINTVALUE(X, Y, Z) printf("PLUS: %d\nMINUS: %d\nMULTIPLY: %d", X, Y, Z);
main() {
int A = 7;
int B = 3;
int _x;
int _y;
int _z;
_x = MY_PLUS(A, B);
_y = MY_MINUS(A, B);
_z = MY_MULTIPLY(A, B);
MY_PRINTVALUE(_x, _y, _z);
}
3. 장단점
1) 장점
- 인수 타입 신경 안써도 됨 (이유: 단순히 치환substitute만 해주기 때문)
- 함수 호출에 의한 성능 저하가 없음
2) 단점
- 단순 치환 방식이라 복잡한 함수의 기능 구현은 어려움
- #define은 전처리기 영역에서 단순 치환이기에 결과가 다른 경우가 존재
- 컴파일에서 발생하는 데이터 타입 문제 발견 못함
02 Inline 함수
1. 정의
- 인라인 함수는 정의한 코드들이 인라인 함수 호출 시 그 자리에 인라인 함수 코드 자체가 안으로 들어간다는 뜻
- 즉, 함수의 내용을 호출을 통해서 실행시키는 것이 아니라, 호출하는 코드 자체가 함수 내용의 코드가 됨
2. 문법
- 함수 앞에 inline을 붙여주기만 하면 됨
inline 데이터타입 인라인함수명([인자]) {
함수내용;
}
- 예시)
#include <stdio.h>
inline int multiple(int a, int b) {
return a * b;
}
int main(void) {
int result;
result = multiple(2, 3);
printf("%d\n", result); // 6
return 0;
}
- 위와 같이 작성 시 해당 코드는 컴파일을 실행하면 아래와 같이 변경됨
#include <stdio.h>
inline int multiple(int a, int b) {
return a * b;
}
int main(void) {
int result;
result = inline int multiple(2, 3) { // inline으로 변경된 줄
return 2 * 3; // inline으로 변경된 줄
} // inline으로 변경된 줄
printf("%d\n", result); // 6
return 0;
}
- 선언한 함수의 코드를 함수가 실행되는 부분에 복제하여 작동하는 것을 확인
3. 장단점
1) 장점
- 함수를 따로 실행하지 않고 작동할 수 있기 때문에 실행속도 빨라짐
- 빠른 속도를 중요시 하는 부분에서 사용하면 적합
2) 단점
- 코드가 물리적으로 길어지다보니 용량이 커질 수 있음
03 Macro 함수와 Inline 함수 비교
Macro 함수 | Inline 함수 |
|
|
참조
- () https://velog.io/@wonder_land/C-15.-매크로-함수-인라인-함수
- (02 Inline 함수 2. 문법) https://blog.naver.com/makeflood/222603808998
- (02 Inline 함수 2. 문법) https://velog.io/@emplam27/C언어-매크로-인라인-함수
- (02 Inline 함수) https://blog.naver.com/makeflood/222603808998
- (02 Inline 함수 3. 장단점) https://coding-factory.tistory.com/694
- (03 Macro 함수와 Inline 함수 비교) https://indirect91.tistory.com/35
'C' 카테고리의 다른 글
memset (C 메모리 초기화 함수) (0) | 2024.08.28 |
---|---|
struct 구조체 (C언어 데이터 타입) (0) | 2024.08.09 |
Macro (매크로) (0) | 2024.06.25 |
# 및 ## (C 언어 매크로 연산자) (0) | 2024.06.25 |
자료형 종류 (C 언어) (0) | 2024.06.24 |