[c] 매크로 함수와 인라인 함수의 차이점

매크로 함수와 인라인 함수는 둘 다 코드 실행을 최적화하는 데 사용되지만, 그들 간에는 몇 가지 주요한 차이점이 존재합니다.

매크로 함수

매크로 함수는 전처리기(preprocessor)에 의해 처리되며, 함수 호출 부분이 해당 매크로 함수의 본문으로 직접 대체됩니다. 이는 매크로 호출 시 매개 변수의 값이 평가되지 않을 수 있으며, 디버깅에 어려움을 줄 수 있습니다.

예를 들어, 다음과 같이 매크로 함수를 정의하고 호출할 수 있습니다.

#define SQUARE(x) x*x

int result = SQUARE(3+2); // 전처리기는 이를 3+2*3+2 로 처리

위의 코드에서 result의 값은 11이 됩니다.

매크로 함수는 일반적으로 간단한 코드 조각을 대체하는 데 사용되며, 코드 크기를 증가시킬 수 있습니다.

인라인 함수

반면에, 인라인 함수는 호출되는 곳에 함수 코드가 직접 삽입됩니다. 컴파일러가 이를 자동으로 처리하므로, 매크로 함수와 달리 매개 변수를 실제로 계산한 후 인라인 함수를 호출하게 됩니다.

예를 들어, 다음과 같이 인라인 함수를 정의하고 호출할 수 있습니다.

inline int square(int x) {
    return x*x;
}

int result = square(3+2); // 3+2*3+2로 계산한 후 인라인 함수 호출

위의 코드에서 result의 값은 25가 됩니다.

인라인 함수는 보통 복잡한 코드에 대응하기 위해 사용되며, 코드량이 많이 증가하지 않도록 컴파일러가 최적화합니다. 또한 매크로 함수와는 달리 유형 검사와 범위 검사를 통해 안전하게 사용될 수 있습니다.

결론

매크로와 인라인 함수는 각자의 장단점이 있으며, 프로젝트의 요구에 따라 적절한 방식을 선택해야 합니다. 간단한 코드 대체에는 매크로를, 안전하고 최적화된 함수 호출이 필요한 경우에는 인라인 함수를 선택하는 것이 좋습니다.