선행처리기 와 매크로

BANG·2020년 11월 24일

C 기본

목록 보기
6/7

선행처리

  • 컴파일 이전의 처리
  • 삽입해 놓은 선행처리 명령을 단순 치환
  • 매크로 명령문(선행 처리)은 파일 단위로만 유효

%E1%84%89%E1%85%A5%E1%86%AB%E1%84%92%E1%85%A2%E1%86%BC%E1%84%8E%E1%85%A5%E1%84%85%E1%85%B5%E1%84%80%E1%85%B5%20%E1%84%8B%E1%85%AA%20%E1%84%86%E1%85%A2%E1%84%8F%E1%85%B3%E1%84%85%E1%85%A9%201f74d1f0d6d946e8a70bcc18b815ad7c/Untitled.png

#include<stdio.h>
#pragma warning(disable:4996)

# define NAME "홍길동"
# define AGE 24
# define ADDR puts("주소 : 경기도 용인시\n");

main()
{
	printf("이름 : %s\n", NAME);
	printf("나이 : %d\n", AGE);
	ADDR;
}
#include<stdio.h>
#pragma warning(disable:4996)

# define SQUARE(x) x*x

main()
{
	int num = 20;

	printf("square of num : %d\n", SQUARE(num));
	printf("square of 3 : %d\n", SQUARE(3));
	printf("square of -2 : %d\n", SQUARE(-2));
}

먼저 정의된 매크로도 매크로 정의시에 사용 가능

#include<stdio.h>
#pragma warning(disable:4996)

# define PI 3.14
# define PRODUCT(x, y) ((x)*(y))
# define CIRCLE(a) (PRODUCT((a), (a)) * PI)

main()
{
	double rad = 2.1;
	printf("반지름 %g인 원의 넓이 : %g\n", rad, CIRCLE(rad));
}

매크로 장점

  • 실행 속도가 빠름
  • 별도 함수를 정의하지 않아도 됨

매크로 단점

  • 정의하기 까다로움
  • 디버깅이 어려움

조건부 컴파일을 위한 매크로

  • #if ~~ (#elif ... #else...) #endif : ~~가 참이라면
  • #ifdef ~~ (#elif ... #else...) #endif : ~~가 정의되었다면
  • #ifndef ~~ (#elif ... #else...) #endif : ~~가 정의되지 않았다면
profile
Record Everything!!

0개의 댓글