[C언어] 매크로, 인라인 함수

emplam27·2021년 1월 23일
0

C언어

목록 보기
1/2

함수를 많이 사용하는 C코드의 실행속도를 높혀줄 수 있는 매크로인라인 함수에 대해 사용방법, 장단점 등을 포스팅 해보겠습니다.


매크로(Macros)

매크로는 #define으로 함수와 비슷한 동작을 하도록 정의하는 방법입니다.

#include <stdio.h>
#define MUL(X, Y) X*Y
#define PRINT(X) printf("%d\n", X)  

int main(void) {
    int a = 2, b = 3;  
    PRINT(MUL(a, b));  // 6
    return 0;
}

진짜 함수는 아니고 함수처럼 동작하게 하는 일종의 방법으로 치환을 사용합니다. 아래 수식을 보면 X * X 식에 1 + 2가 들어갈 때 3 * 3이 아닌 1 + 2 * 1 + 2로 동작합니다. 이런 부분이 치환을 사용하는 부분이며, 함수와 동작하는 방식이 많이 다르므로 사용에 주의해야 합니다.

#include <stdio.h>
#define MUL_1(X) X*X
#define MUL_2(X) ((X)*(X))
#define PRINT(X) printf("%d\n", X)  

int main(void) {
    PRINT(MUL_1(1 + 2));  // 1 + 2 * 1 + 2 = 5
    PRINT(MUL_2(1 + 2));  // ((1 + 2) * (1 + 2)) = 9
    return 0;
}  

매크로는 단순 치환을 해주는 것이기 때문에 자주 사용하는 부분을 대체하는 용도로 주로 사용한다고 합니다. 단순히 코드를 치환해준다고 생각하면 되기 때문에 자료형을 지정하거나 하지 않습니다.

함수를 실행하는 것이 아니라 그저 코드를 적어주는 동작과 같기 때문에 프로그램의 실행 속도를 올려준다는 장점이 있습니다. 다만 의도대로 작동하지 않을 가능성이 높아 반복적으로 사용하는 코드를 간결화하거나 간단하게 사용하는 용도로 적합할 것 같습니다.


인라인 함수

인라인 함수는 함수 앞에 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) {
        return 2 * 3;
    }
    printf("%d\n", result);  // 6
    return 0;
}

인라인 함수는 선언한 함수의 코드를 함수가 실행되는 부분에 복제하여 작동합니다. 함수를 따로 실행하지 않고 작동할 수 있기 때문에 실행속도가 빨라집니다. 하지만 코드가 물리적으로 길어지다보니 용량이 커질 수 있습니다. 빠른 속도를 중요시 하는 부분에서 사용하면 적합할 것입니다.

profile
내가 다시 보고 싶은 글이어야 남들도 보고 싶은 글이라 생각하며 작성합니다. 공부한 내용들을 건강하게 공유하며 함께 성장하고자 합니다😊😊

0개의 댓글