코딩41일차 C/C++

마스터피스·2023년 11월 14일
0

C/ C++ 

목록 보기
12/35
post-thumbnail

매크로 - C/C++의 독특한 매력

1) 전처리기 '#'

  • 전처리기는 모두 다 #으로 시작하게 됩니다. 우리가 여지껏 흔히 써왔던 #include 또한 전처리기 즉 매크로 입니다. #define _CRT_SECURE_NO_WARNINGS 라는 구문도 즉 전처리기 매크로 입니다.

2) #define ...

  • define 전처리기는 적당한 규칙으로 소스코드를 교체해주는 역할을 합니다. 이를 통해 상수(불변하는 값), 혹은 매크로 함수를 지정해줄 수 있습니다. 정확히 알아둬야 할 것은 #define으로 만들어진 매크로 함수는 실제로 함수의 역할을 하는 것이 아닌 함수처럼, 소스코드를 직접 변경시켜준다는 뜻입니다. 이를 이용해 상수와 매크로 함수를 사용할 수 있습니다.

예제 코드)

#include "Header.h"
#define SWAP(X, Y, T) T = X; X = Y; Y = T


int main() {

    int v1 = 100;
    int v2 = 200;
    int temp;

    SWAP(v1, v2, temp);

    printf("v1 : %d\n", v1);
    printf("v2 : %d\n", v2);
    printf("temp : %d\n", temp);


    return 0;
}

tip) 소스코드를 두줄로 할때는 \를 한 후에 한칸 띄워서 작성한다. (역슬레시 이후엔 공백(스페이스)도 있으면 안된다.)

3) #include ...

  • #include 전처리기는 소스코드의 텍스트를 그대로 복사해서 붙여넣는 전처리기 입니다. 이를 통해 C / C++ 는 함수의 선언이 존재함을 이해할 수 있고 이를 통해 우리가 만들어두지 않은 함수들인 printf 나 scanf 등을 활용할 수 있습니다. 이 내용의 좀 더 상세한 설명은 4챕터에서 좀 더 자세히 다룰 예정입니다.

4) 매크로 함수

  • #define을 통해서는 매크로(전처리) 함수를 만들 수 있습니다. 이 매크로 함수는 실제로 컴퓨터에서 동작하는 함수가 아닌 소스코드를 그냥 교체해버리는 함수입니다.

5) 매크로 상수

  • #define을 통해서는 매크로 상수도 정의할 수 있습니다.정의된 매크로 상수는 실제로 프로그램 내부에서의 상수로 활용될 수 있지만 조건 매크로를 만드는데 응용할 수 있습니다.

예제코드)

#include "Header.h"


#define PI 3.141592


int main() {

    float pi = PI;


    return 0;
}

6) #if #elif #else #endif

  • 매크로와 연계하여 매크로 조건을 넣을 수 있는 구문입니다. 사용방법은 일반 if - else 구문과 거의 일치합니다. 다만 이 매크로 조건절은 컴파일 시에 소스코드를 완전히 삭제하거나 남겨두거나 하는 방법으로 사용됩니다. (실제로 여러분의 소스코드가 삭제되는 것은 아니고, 컴파일 시에 삭제되어 컴파일이 됩니다)

예제코드)

#include "Header.h"


#define PI 3.141592

#define EXECUTE_NUM 1

#if EXECUTE_NUM == 0
int main() {
    printf("Hello World 0");
    return 0;
}

#else
int main() {
    printf("Hello World 1");
    return 0;
}


#endif

7) #ifdef #else #endif

  • 이 구문은 매크로가 정의되어 있다면 을 기준으로 동작하는 매크로 조건입니다.

예제코드

#include "Header.h"


#define PI 3.141592

#define EXECUTE_NUM

#ifdef EXECUTE_NUM == 0
int main() {
    printf("Hello World 0");
    return 0;
}

#else
int main() {
    printf("Hello World 1");
    return 0;
}


#endif

과제형 문제)

sol)

#include "Header.h"


#define SWAP(X, Y, TYPE) {TYPE temp = v1; v1 = v2; v2 = temp; }

int main() {

    int v1 = 100;
    int v2 = 200;


    SWAP(v1, v2, int);
    SWAP(v1, v2, int);
    printf("v1 = %d \n", v1);
    printf("v2 = %d \n", v2);

    return 0;
}

// 매크로 함수를 두번 이상 사용할 때 브라켓({})으로 범위를 지정해줘야한다.

profile
코딩 일지

0개의 댓글