매크로 함수

A Code AM·2020년 4월 20일
0

모르고 썼다

목록 보기
6/7

매크로 함수

: C언어에서 #define 선행처리 지시문에 인수로 함수의 정의를 전달해 함수처럼 동작하는 매크로 (= function-like macro)

※ 주의점 ※

매크로 함수는 단순 치환만 해주기 때문에 일반 함수와 완전히 똑같은 방식으로 동작하진 않음.

<예제>

#include <stdio.h>
#define SQR(X) X*X

int main(void)
{
    int result;
    int x = 5;  

    result = SQR(10);
    result = SQR(x);
    result = SQR(x+3);

    return 0;
}  

위의 계산 결과는 어떻게 나올까? 각각 100, 25, 23이 나온다
처음 두 개는 그렇다 치는데 왜 마지막은 X+3인 8이 나오지 않고 23이 나왔을까
SQR(x+3)은 이렇게 대체되어 계산된다

x+3 * x+3 = 5+3 * 5+3 = 5+15+3 = 23

일반 함수는 인수를 프로그램이 실행 중일 때 전달 받지만, 매크로 함수는 인수를 컴파일 이전에 미리 치환하기 때문이다.

그렇다면 어떻게 해야할까? -> 인수를 모두 괄호로 묶어주자

#include <stdio.h>
#define SQR(X) ((X)*(X))	// 매크로 함수는 모든 인수를 괄호로 묶어줘야 한다.

int main(void)
{
    int result;
    int x = 5;  

    result = SQR(10);
    result = SQR(x);
    result = SQR(x+3);

    return 0;
  1. 매크로 함수의 전체를 괄호(())로 감싸야 한다.
  2. 매크로 함수의 인수들도 각각 괄호로 감싸야 한다.
  3. 매크로 함수를 호출할 때에는 증감 연산자(++,--)나 복합 대입 연산자 등은 사용하지 않는 것이 좋다.
    (매크로 함수는 얼핏 함수처럼 보이지만 일반 함수와는 전혀 다른 시간대에 이루어진다)

매크로 함수의 장단점

장점
1. 매크로 함수는 단순 치환만 해주므로, 인수 타입을 신경쓰지 않음
2. 매크로 함수 사용하면 여러개의 명령문을 동시에 포함 가능
3. 함수 호출에 의한 성능 저하가 일어나지 않아 프로그램 실행속도 향상

단점
1. 원하는 결과를 얻는 정확한 매크로 함수 구현은 어렵고, 디버깅 또한 매우 어려움
2. 매크로 함수의 크기가 증가하면 증가할수록 사용되는 괄호 또한 매우 많아져서 가독성이 떨어짐 -> 간단한 함수에 쓰자

profile
배움기록

0개의 댓글