본문 바로가기
Computer & Program/잡다한 이모저모

#define, 매크로 사용 예

by TDRemon 2009. 3. 4.
반응형

// 첫번쨰 예제
#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

댓글