매크로

  • 7 minutes to read

#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() 매크로를 만나면 입력 대기를 한 후 표준 입력으로부터 하나의 문자를 입력 후 엔터를 치면 그 값을 반환해 줍니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com