본문 바로가기
c언어

c언어 단순 매크로에 대하여 알아보기

by 개발자 L 2023. 2. 19.
반응형

c언어 단순 매크로에 대하여 알아보기

네 안녕하세요, 이번 포스팅에서는 c언어로 매크로를 거는 방법에 대하여 알아볼 겁니다.

매크로는 크게 두 가지 종류가 있습니다.

  • 단순 매크로
  • 함수 매크로

이렇게 나뉘는데,

이 중에서 오늘은 단순 매크로를 하는 사용하는 방법에 대하여 알아보도록 하겠습니다.

 

1. 단순 매크로

단순 매크로는 #define 지시자를 이용하는데,

이를 이용해서 숫자로 된 상수를 기호 상수를 만드는 것을 단순 매크로라고 합니다.

이 방법은 예전에도 자주 썼었죠?

저는 이 방법을 '상수화 시킨다'라는 표현을 쓴 적이 있습니다.

사용 방법은 이렇습니다.

#define MAX_SIZE 100

이런 식으로 씁니다.

자세한 방법은 제가 이전에 기재해 뒀던 상수에 대한 자료를 보면 더 도움이 될 것입니다.

 

2022.11.27 - [분류 전체 보기] - c언어 상수 알아보기(#define, const)

 

c언어 상수 알아보기(#define, const)

c언어 상수 알아보기(#define, const) 네 안녕하세요, 이번 포스팅에서는 c언어에서 쓰는 요소 중 하나인 상수에 대하여 한 번 적어보려고 합니다. 상수는 변수와는 다르게 변하지 않는 값이라는 특

funnycoderl.tistory.com

 

그럼 이어서 더 이야기를 하도록 하겠습니다.

위에 선언한 상수는 100이라는 정수 상수를 MAX_SIZE라는 이름으로 기호 상수화 시켜 치환해 놓은 것입니다.

이렇게 하면 최대 사이즈는 100으로 됩니다.

 

1 - 1. #define을 쓰는 이유

이걸 쓰는 이유는 크게 두 가지입니다.

  • 가독성을 높여준다.
  • 값의 변경이 용이하다.

첫 번째 이유인 가독성 향상에 대한 건은 한눈에 봐도 들어오셨으리라 생각합니다.

사실 그냥 100을 적어두면 그게 변수에 들어간 값인지,

아니면 상수인지,

그리고 어디에 어떻게 쓰이는 요소인지 인지를 못할 수 있습니다.

하지만 이렇게 미리 기호 상수로 상수화를 해놓으면 저 100이 어떤 것을 의미를 하는지 단박에 볼 수 있습니다.

다시 말하면 저렇게 기호 상수로 바꿔놓음으로써 더 많은 정보를 제공할 수 있다는 것이죠.

 

두 번째 경우는 저렇게 기호 상수화를 시켜서 매크로를 걸어 정의를 내려놓으면

저기에서 기호 상수에 들어가는 숫자만 바꿔주면 해당 기호 상수가 들어가 있는 값들이 한 번에 모두 변경되므로

값 변경도 일일이 하지 않고 한 번에 되기 때문에 훨씬 간단합니다.

예를 들어 아까 위에서 쓴 MAX_SIZE의 값을 200으로 올리고 싶다,

그러면 이렇게 하시면 됩니다.

#define MAX_SIZE 200

이렇게 하면 기호 상수로 정의된 모든 값들이 바뀝니다.

아래 코드들은 #define을 이용해서 정의하는 제일 대표적인 사례들을 정리를 한 것입니다.

#define PI 3.141592 // 원주율
#define EOF (-1) // 파일의 끝 표시
#define EPS 1.0e-9 // 실수의 계산 한계
#define DIGITS "0123456789" // 문자 상수 정의(진수)
#define BRACKET "(){}[]" // 문자 상수 정의(괄호)
#define getchar() getc(stdin) // stdio.h에 정의
#define putchar() putc(stdout) // stdio.h에 정의
반응형

 

이제 이 #define을 이용해서 한 번 코드를 작성해 보도록 하겠습니다.

#include <stdio.h>

#define AND &&
#define OR ||
#define NOT !
#define IS ==
#define IS_NOT !=

int search(int list[], int n, int key);

int main()
{
    int m[] = {1, 2, 3, 4, 5, 6, 7};

    printf("배열에서 5의 위치는 %d 입니다.\n", search(m, sizeof(m) / sizeof(m[0]), 5));

    return 0;
}

int search(int list[], int n, int key)
{
    int i = 0;

    while(i < n AND list[i] IS_NOT key)
    {
        i++;
    }

    if(i IS n)
    {
        return -1;
    }

    else
    {
        return i;
    }
}

이렇게 논리 연산자를 영문으로 기호 상수화 시킨 코드를 써서

배열 내에서 5의 위치를 알아내는 코드를 작성해 봤습니다.

여기서 보이는 AND, OR 등은 파이썬에서 쓰는 방법인데,

소문자로 저런 식으로 논리 연산자 대신 저렇게 써서 조건과 논리를 따집니다.

c언어에서는 일반적으로는 파이썬과 같이는 할 수 없지만,

저렇게 상수화를 시키면 가능해집니다.

그럼 결과를 보도록 하겠습니다.

배열에서 5의 위치는 4 입니다.

이렇게 결과도 잘 나온 것을 볼 수 있습니다.

 

지금까지 단순 매크로를 하는 방법에 대하여 알아보았습니다.

다음 포스팅에서는 함수 매크로를 사용하는 방법에 대하여 알아보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다~

반응형

댓글