Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C의 매크로 대 함수

<시간/>

이 섹션에서는 C에서 매크로와 함수의 차이점이 무엇인지 알아볼 것입니다. 매크로는 사전 처리되므로 모든 매크로가 컴파일되는 동안 사전 처리됩니다. 함수는 전처리가 아니라 컴파일됩니다.

매크로에서는 유형 검사가 수행되지 않으므로 다른 유형의 입력에 대해 몇 가지 문제가 발생할 수 있습니다. 함수의 경우에는 수행되지 않습니다. 또한 매크로의 경우 입력이 제대로 유지되지 않으면 잘못된 결과가 생성될 수 있습니다. 문제에 대한 아이디어를 얻으려면 다음 프로그램을 확인하십시오.

예시

#include <stdio.h>
#define SQUARE(x) x * x
int sqr(int x) {
   return x*x;
}
main() {
   printf("Use of sqr(). The value of sqr(3+2): %d\n", sqr(3+2));
   printf("Use of SQUARE(). The value of SQUARE(3+2): %d", SQUARE(3+2));
}

출력

Use of sqr(). The value of sqr(3+2): 25
Use of SQUARE(). The value of SQUARE(3+2): 11

함수와 매크로, 우리는 둘 다 동일한 작업을 수행하기를 원하지만 여기서 출력이 동일하지 않다는 것을 알 수 있습니다. 주된 이유는 3 + 2를 함수 인수로 전달할 때 5로 변환된 다음 5 * 5 =25를 계산하기 때문입니다. 매크로의 경우 3 + 2 * 3 + 2 =3 + 6 + 2 =11입니다.

따라서 다음 문제에는 매크로를 사용하지 않는 것이 좋습니다. -

  • 유형 검사가 없습니다.

  • 단순 교체를 유발하므로 기본값은 디버그입니다.

  • 매크로에는 네임스페이스가 없습니다. 따라서 매크로가 한 섹션에 정의되어 있으면 다른 섹션에서 사용할 수 있습니다.

  • 매크로는 전처리 과정에서 코드 앞에 추가되면서 코드 길이를 늘립니다.

  • 매크로는 컴파일 시간 오류를 확인하지 않습니다.