#define은 다음과 같이 선언 했을 때, 기호식 PI를 컴파일 시에 정의한 상수 3.14로 대체한다.
#define PI 3.14
가독성 면에서는 괜찮은 방법이지만 디버깅 시에는 기호 PI가 아니라 숫자 3.14로만 나타나기 때문에 어디서온 값인지 알수가 없게 된다.
이 문제의 해결법은 상수를 쓰는 것이다.
const double PI = 3.14;
이 경우 3.14의 사본이 여러개 생기지 않아 코드의 크기가 줄어드는 이점도 있다.
이때 주의 할 점은
첫째. 상수 포인터를 정의 하는 경우 타입 뿐 아니라 포인터가 가리키는 대상까지 const로 선언하는 것이 보통이다.
char* 기반의 문자열 상수를 정의한다면 다음과 같이 const를 두번 써야한다.
const char* const authorName = "Scott Meyers";
추가로 문자열에 대해서는 char*보다는 string 객체가 사용하기 좋다.
둘째.
클래스 멤버로 상수를 정의하는 경우 정의는 구현 파일에 두고 초기화를 정의시에 한다, 헤더파일에서 선언한다. 이것이 안먹히는 컴파일러의 경우 반대로...
함수의 지역변수: 호출 타임에 생성. static변수도 마찬가지.(단, 프로그램 끝날때까지 안사라짐)
클래스의 static 변수: 컴파일 타임에 생성.