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

C의 위생적 매크로

<시간/>

여기에서 C의 Hygienic Macros를 볼 수 있습니다. 우리는 C의 매크로 사용법을 알고 있습니다. 그러나 때로는 실수로 식별자를 캡처하여 원하는 결과를 반환하지 않는 경우가 있습니다.

다음 코드를 보면 제대로 동작하지 않는 것을 알 수 있습니다.

예시

#include<stdio.h>
#define INCREMENT(i) do { int a = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   INCREMENT(a);
   INCREMENT(b);
   printf("a = %d, b = %d\n", a, b);
}

전처리 후 코드는 다음과 같습니다 -

예시

#include<stdio.h>
#define INCREMENT(i) do { int a = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   do { int a = 0; ++a; } while(0) ;
   do { int a = 0; ++b; } while(0) ;
   printf("a = %d, b = %d\n", a, b);
}

출력

a = 10, b = 21

여기에서 값이 업데이트되지 않은 것을 볼 수 있습니다. 따라서 이 경우 위생적인 ​​매크로를 사용합니다. 이러한 위생적 매크로는 확장을 통해 실수로 식별자를 캡처하지 않도록 보장하는 매크로입니다. 여기서는 확장 중인 코드와 인터페이스할 위험이 있는 변수 이름을 사용하지 않습니다. 여기서 또 다른 변수 't'가 매크로 내에서 사용됩니다. 프로그램 자체에서는 사용되지 않습니다.

예시

#include<stdio.h>
#define INCREMENT(i) do { int t = 0; ++i; } while(0)
main(void) {
   int a = 10, b = 20;
   //Call the macros two times for a and b
   INCREMENT(a);
   INCREMENT(b);
   printf("a = %d, b = %d\n", a, b);
}

출력

a = 11, b = 21