매크로가 C 또는 C++에서 사용된다는 것을 알고 있지만 유형 검사를 위한 기능은 없습니다. 매크로는 모든 유형의 인수를 사용할 수 있습니다. 다음 예는 이 경우를 명확하게 보여줍니다.
예시
#include<stdio.h> #define INCREMENT(X) ++X main() { int x = 5; float y = 2.56; char z = 'A'; printf("Integer Increment: %d\n", INCREMENT(x)); printf("Float Increment: %f\n", INCREMENT(y)); printf("Character Increment: %c\n", INCREMENT(z)); }
출력
Integer Increment: 6 Float Increment: 3.560000 Character Increment: B
매크로의 문제입니다. C 이후 버전에서는 '_Generic' 키워드를 사용하여 매크로를 사용할 수 있습니다. 이것을 사용하여 다른 유형의 데이터 유형을 사용하는 매크로를 정의할 수 있습니다. 한 가지 예를 살펴보겠습니다.
예시
#include<stdio.h> #define INCREMENT(X) _Generic( (X), char: X+10, int: X+1, float: X+2.5, default: 0) main() { int x = 5; float y = 2.56; char z = 'A'; printf("Integer Increment: %d\n", INCREMENT(x)); printf("Float Increment: %f\n", INCREMENT(y)); printf("Character Increment: %c\n", INCREMENT(z)); }
출력
Integer Increment: 6 Float Increment: 5.060000 Character Increment: K