“# define”은 전 처리기 지시문입니다. 레이블이 발생할 때마다 동일한 위치에 전처리 된 소스 코드에 배치 될 레이블과 값을 정의합니다. 정의 된 유형이 없으므로 컴파일 전에 문자열의 기본적이고 멍청한 대체입니다. 그런 다음 컴파일 중에 오류 또는 오해로 이어질 수 있습니다.
“const int xxx”는 유형을 정의하고 해당 인스턴스의 값을 잠급니다. 이 방법을 사용하는 것이 더 안전합니다. 컴파일러는 유형 오류를 확인하고 실수 한 경우 메시지를 던지거나 컴파일을 중단 할 수 있습니다.
예 :
#define A 5 int dummy_integer = A
…는 …
int dummy_integer = 5
…로 전처리되며 컴파일러는이 명령문을 읽습니다.
하지만 좋은 기억이 있다면 다음과 같이 전 처리기 지시문을 항상 덮어 쓸 수 있습니다.
#define A 5 int dummy_integer = A //some code here #undef A #define A "my_string" std::cout << A
그건 좋지 않습니다. 대신 “const”수정자를 사용하여 변수의 값 (또는 유형)을 변경할 수 없습니다 (따라서 “상수”로 정의 됨).