매크로(macro)란?
: 컴퓨터 과학 분야에서 정해진 순서에 따라 어떻게 특정한 입력 시퀀스가 출력 시퀀스로 매핑되어야 하는지를 정의하는 규칙- 선행처리
: 컴파일 이전의 처리를 의미. 삽입해 놓은 선행처리 명령문대로 소스코드의 일부를 수정(단순치환, substitution)할 뿐.#include <stdio.h> // 선행처리 "stdio.h 파일의 내용을 이곳에 가져다 놓으세요."
#define PI 3.14 // 선행처리 ( 지시자, 매크로, 매크로 몸체) PI : 오브젝트 유사 매크로(object-like macro) or 매크로 상수
#define NAME "이영준"
#define AGE 27
#define PRINT_ADDR printf("주소 : 경기도 고양시 일산구\n");
#define SQUARE(X) X*X
#define PRODUCT(X, Y) ((X)*(Y))
#define CIRCLE_AREA(R) (PRODUCT((R),(R)) * PI)
int main() {
double num;
double rad = 2.1;
num = PI * 3.5;
printf("파이 : %lf \n", num);
printf("반지름 %g인 원의 넓이 : %g \n\n", rad, CIRCLE_AREA(rad));
printf("이름 : %s \n", NAME);
printf("나이 : %d \n\n", AGE);
PRINT_ADDR;
int num2 = 20;
printf("num2의 제곱 : %d \n", SQUARE(num2) );
printf("3의 제곱 + 2 : %d \n", SQUARE(3 + 2)); // 3*3+2
printf("3+2의 제곱 : %d \n", SQUARE((3 + 2))); //(3+2)*(3+2)
return 0;
}
- 연산을 요하는 매크로를 만들경우 관호를 마구마구 칩시다!
- C로 라즈베리파이를 사용할때 PIN_NUM을 define 한다.
- 조건부 컴파일(Conditional Compilation)
: 특정 조건에 따라 소스코드의 일부를 삽입하거나 삭제할 수 있도록 디자인된 지시자.- #if 조건매크로 ... #elif 조건매크로 ... #endif
- #ifdef 매크로 ... #endif : 정의되어 있다면.
- #ifndef 매크로 ... #endif : 정의되지 않았다면
- 위의 세 부분 모두 #else 의 삽입 가능
- 매개변수의 결합과 문자열화
#define STRING_JOB(A, B) "A의 직업은 B입니다."
printf("%s", STRING_JOB(이영준, 개발자) );
출력 : A의 직업은 B입니다.
#define STRING_JOB(#A, #B) "A의 직업은 B입니다."
printf("%s", STRING_JOB(이영준, 개발자) );
출력 : 이영준의 직업은 개발자입니다.
- 매크로를 이용한 문자열 연결
#define STNUM(Y, S, P) Y##S##Pprintf(학번 : %d \n", STNUM(10 11 187));
- 숫자만 처리 가능하다.
댓글
댓글 쓰기