매크로
#define 지시문으로 매크로 만들기
#define
구문은 매크로를 만드는 기능을 합니다. 프로그래밍에서 매크로(Macro)는 특정 작업을 수행하기 위해 일련의 명령으로 자동 확장되는 단일 명령을 말합니다. 쉽게 말해 간단한 함수로봐도 됩니다.
#define
구문은 다음과 같은 두 가지 형태로 많이 사용됩니다.
- #define 상수이름 상수문자열
- #define 매크로함수 매크로함수본문
매크로 상수: #define
으로 상수 사용하기
프로그램 코드 상단 영역에 #define
구문을 사용하여 상수를 선언할 수 있습니다. 이를 다른 말로 매크로 상수라고도 합니다. 매크로 상수는 매크로 이름과 매크로 상수 값을 공백을 구분해서 선언할 수 있습니다. 매크로 상수는 일반적으로 대문자로 많이 표현합니다.
#define 매크로이름 매크로상수값
#define으로 만든 상수는 대문자만 사용합니다.
코드: MacroConstant.c
#include <stdio.h>
// 전처리기 지시문으로 매크로 상수 선언: 공백을 기준으로 매크로 이름과 매크로 상수를 구분
#define PI 3.14
#define SPEED_LIMIT 50
int main(void)
{
// 일반 변수처럼 매크로 상수 참조해서 사용
printf("PI 이름으로 만들어진 매크로 상수 출력: %.2f\n", PI);
printf("일반 도로의 자동차 최고 속도: %d\n", SPEED_LIMIT);
return 0;
}
PI 이름으로 만들어진 매크로 상수 출력: 3.14
일반 도로의 자동차 최고 속도: 50
PI 이름의 상수에 3.14를 넣으면 현재 프로그램 내에서 변하지 않는 상수처럼 사용할 수 있습니다. 상수는 단어와 단어 사이에 _(언더스코어 문자)를 넣습니다. 이는 C 언어 코딩 관례이니 따라야 합니다.
매크로 예제
코드: preprocessor_define.c, 전처리기.c
/*
전처리기(PreProcessor): 실행할 상수 또는 식을 미리 정의
*/
#include <stdio.h>
#define HI "안녕하세요."
#define F 10
#define S 20
#define T 30
#define Write printf
#define MAX 100
#define MIN 0
int main(void)
{
const int NUM = 10; // 상수(Constant)
printf("%s\n", HI);
printf("%d + %d + %d = %d\n", F, S, T, (F + S + T)); // 10 + 20 + 30 = 60
Write("%s\n", HI);
}
안녕하세요.
10 + 20 + 30 = 60
안녕하세요.
코드: preprocessor_macro_function.c, 전처리기_매크로함수.c
// 전처리기 지시문 == 매크로 함수
#define _CRT_SECURE_NO_WARNINGS // scanf() 보안 경고에 따른 컴파일 에러 방지
#include <stdio.h>
#define MAX(f, s) ((f > s) ? f : s )
#define MIN(f, s) ((f < s) ? (f) : (s))
int main(void)
{
int f, s;
printf("두 수를 입력하시오 : ");
scanf("%d %d", &f, &s);
printf("최댓값 : %d\n", MAX(f, s));
printf("최솟값 : %d\n", MIN(f, s));
return 0;
}
두 수를 입력하시오 : 3 5
최댓값 : 5
최솟값 : 3
매크로 함수
매크로 함수는 사용자 정의 함수와 동일하게 사용될 수 있습니다.
코드: MacroFunction.c
#include <stdio.h>
//[!] 매크로 함수 선언
#define max(x, y) x > y ? x : y
#define min(x, y) (x > y ? y : x)
int main(void)
{
printf("최댓값: %d\n", max(3, 5)); // 5
printf("최솟값: %d\n", min(-3, -5)); // -5
return 0;
}
최댓값: 5
최솟값: -5
매크로 상수
코드: macro_constant.c
#include <stdio.h>
// 전처리기 지시문으로 매크로 상수 선언: 공백을 기준으로 매크로 이름과 매크로 상수를 구분
#define PI 3.14
#define SPEED_LIMIT 50
int main(void)
{
// 일반 변수처럼 매크로 상수 참조해서 사용
printf("PI 이름으로 만들어진 매크로 상수 출력: %.2f\n", PI);
printf("일반 도로의 자동차 최고 속도: %d\n", SPEED_LIMIT);
return 0;
}
PI 이름으로 만들어진 매크로 상수 출력: 3.14
일반 도로의 자동차 최고 속도: 50
매크로 함수 선언
코드: macro_function.c, MacroFunction.c
#include <stdio.h>
//[!] 매크로 함수 선언
#define max(x, y) x > y ? x : y
#define min(x, y) (x > y ? y : x)
int main()
{
printf("최댓값: %d\n", max(3, 5)); // 5
printf("최솟값: %d\n", min(-3, -5)); // -5
return 0;
}
//최댓값: 5
//최솟값 : -5
최댓값: 5
최솟값: -5
putchar 매크로를 사용하여 화면에 문자 하나 출력
putchar
함수는 원칙적으로 putchar
매크로입니다. 하지만, 학습 단계에서 크게 구분을 짓지 않아도 상관없습니다. 이 putchar
매크로는 표준 출력을 나타내는 stdout
키워드를 사용하여 현재 사용하고 있는 화면에 문자 하나를 출력합니다.
코드: putchar_macro.c, PutcharMacro.c
//[?] putchar() 매크로: 표준 출력(stdout)에 문자 하나를 출력
#include <stdio.h>
int main(void)
{
putchar('Z'); // Z 출력
putchar('\n'); // 줄 바꿈
putchar(90); // Z 출력
return 0;
}
Z
Z
putchar
매크로는 매개 변수로 int
타입을 받습니다. 문자 또는 숫자를 받아 출력합니다.
putchar('Z')
는 문자 Z 자체를 출력하고, putchar('\n')
는 이스케이프 문자인 \n
을 사용하여 줄 바꿈을 합니다. 마지막으로 putchar(90)
은 아스키기호 90에 해당하는 Z
를 출력합니다.
getchar 매크로를 사용하여 문자 하나 입력 받기
getchar
함수 또는 매크로는 표준 입력을 의미하는 stdin
으로부터 문자 하나를 입력 후 엔터 키를 입력하면 그 값을 받아올 수 있습니다. 현재 우리는 콘솔에서 프로그램을 실행하기에 표준 입력인 stdin
은 콘솔 화면을 나타냅니다.
코드: getchar_macro.c, GetcharMacro.c
//[?] getchar() 매크로: 표준 입력(stdin)에서 문자 하나를 입력
#include <stdio.h>
int main(void)
{
int anykey;
printf("키보드에서 아무키나 누르고 엔터치세요.\n");
anykey = getchar(); // 입력 대기
printf("입력한 값은 %c입니다.\n", anykey);
return 0;
}
키보드에서 아무키나 누르고 엔터치세요.
A
입력한 값은 A입니다.
코드가 실행될 때 getchar()
매크로를 만나면 입력 대기를 한 후 표준 입력으로부터 하나의 문자를 입력 후 엔터를 치면 그 값을 반환해 줍니다.