#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 |