#define

매크로를 정의할 때 앞에 써주는 키워드이다
여기서 매크로는 프로그램 내에서 컴파일러가 매크로를 만났을 때, 대체할 문자열이다
매크로는 컴파일 과정인 전처리기 -> 컴파일러 -> 어셈블러 -> 링커 중
전처리기 단계에서 #define으로 정의된 기호 상수 등을 확장 문자열로 변환시키는 동작을 한다.

형식

#define NAME = "YOUNGWAN" //매크로 상수
#define PI = 3.14f //매크로 상수
#define func(_a, _b) ((_a) < (_b) ? (_a) : (_b)) //매크로 함수

매크로 상수

미리 정의한 매크로 상수명이 사용되면 -> 매크로 확장 문자열로 치환을 한다.

매크로 함수

미리 정의한 매크로 함수명이 사용되면 -> 전달인자의 형태를 고려해서 치환하는 동작을 한다.

장단점?

프로그램 가독성이 좋아진다
유지보수가 쉬워진다.
변수를 사용하는 것 보다 빠르다고 하지만 
#define 보다는 const, enum, inline을 사용하는 것이 좋다고한다.
왜냐하면 위에적은것처럼 #define은 변수가 아닌 단순히 치환되는 형태이기 때문이다.

주의사항

#include "pch.h"
#include <iostream>

#define func(_a, _b) ((_a) < (_b) ? (_a) : (_b))

int main()
{
	int temp = 1;
	int Result = func(1, temp++);
    
    ////////이때
    Result;
    temp;
    //두개의 값은?
}

증감 연산자를 사용할때 주의를 해야한다.
Result = 2
temp = 3
이라는 결과가 나올텐데
이것은 temp++이 치환되면서 2가되고 조건문에서 한번더 사용되면서 증감 연산자가 두번 행해진다.

또 괄호의 유무에도 주의 사항이 있다.

#include "pch.h"
#include <iostream>

#define PLUS1 1 + 2
#define PLUS2 (1 + 2)

int main()
{
	int temp1 = PLUS1 * 5;
	int temp2 = PLUS2 * 5;
}

temp1의 경우
1 + 2 * 5 = 11
temp2의 경우
(1 + 2) * 5 = 15
위오 같은 형식으로 작동한다.

'게임 프로그래밍 > C++ 기초' 카테고리의 다른 글

C++ 콘스트(const)  (1) 2020.03.09
C++ 바이트 패딩(Byte Padding)  (0) 2020.03.09
C++ 얕은복사(Shallow Copy) 깊은복사(Deep Copy)  (2) 2020.03.04
std::weak_ptr  (0) 2020.03.03
std::shared_ptr 정의 및 문제점  (0) 2020.03.02

+ Recent posts