#define(선행처리자)을 사용하는 대신 const, enum, inline(컴파일러)을 사용하자.
#define ASPECT_RATIO 1.653
을 작성했다고 생각하자
ASPECT_RATIO
를 1.653
으로 대체하기 때문에 컴파일러는 ASPECT_RATIO
를 보지 못함#define
된 것들은 선행처리자에 의해 모두 값으로 바뀌면서 목적 코드안에 사본이 등장 횟수만큼 들어가게 됨.
#define
은 유효범위란 게 뭔지도 모르기 때문에 클래스 상수를 만드는게 불가능#include <iostream>
#define CALL_WITH_MAX(a, b) f((a)>(b) ? (a) : (b))
using namespace std;
void f(int m)
{
cout << m << "\n";
}
int main()
{
int a = 5, b = 0;
CALL_WITH_MAX(++a, b);
CALL_WITH_MAX(++a, b + 10);
return 0;
}