// 첫번쨰 예제
#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);
}
'Computer & Program > 잡다한 이모저모' 카테고리의 다른 글
다차원 배열의 예제 (0) | 2009.03.04 |
---|---|
const함수 사용 예 (0) | 2009.03.04 |
구조체, 공용체 종류 및 예 (2) | 2009.03.04 |
구조체를 통한 링크드 리스트의 예 (0) | 2009.03.04 |
문자열 출력 예 (0) | 2009.03.04 |
댓글