#define, 매크로 사용 예
// 첫번쨰 예제
#include<stdio.h>
#define PI 3.14
#define MAX(x,y) (x>y) ? x : y
//macro 함수와 상수는 복사의 의미를 가지고 있다.
void main()
{
int a=123, b=456;
printf("PI=%lf\n", PI);
printf("The Max is %d\n", MAX(a,b));
}
// 두번째 예제
#include<stdio.h>
#define SWAP(x,y) {int t; t=x; x=y; y=t;} // x와 y를 바꿔주는 함수.
void main()
{
int a=5, b=10;
printf("a=%d\tb=%d\n", a, b);
SWAP(a,b);
printf("a=%d\tb=%d\n", a, b);
}
// 세번째 예제
#define SQU(x) x*x
#define PRT(x) printf("%d\n", x)
void main()
{
int x=4;
PRT(SQU(x+2)); // = printf("%d\n", x+2*x+2); = 14
PRT(100/SQU(2)); // = printf("%d\n",100/2*2); = 100
PRT(SQU(++x)); // = printf("%d\n", ++x*++x); = 36
}
위의 예제에서 앞에 14와 100은 어렵지 않게 이해할 수 있을 것이다. 즉 macro는 그냥 그 값이 복사되는 것이다. 마지막 36은 조금 난해하지만 잘 따져보면 이해할 수 있다. 기본적으로 연산자는 *보다 ++이 우선이다. SQU()에는 x를 두번 호출하게 되는데 그리하여 처음 호출했을때 4는 5로, 두번째 호출에서 5는 6으로 된다음 *을 실행하기 때문에 36이 되는 것이다.
// 네번째 예제
#include<stdio.h>
#define PRINT(x) printf(#x " =%d\n", x)
// macro 안에서만 #x를 사용할 수 있다. #x란 x에 해당하는 값을 문자열로 출려하라는 것이다.
void main()
{
int a=5, b=10;
PRINT(a+b);
PRINT(b/5);
PRINT((100+a)*2);
}