(수근수근)
[C++] #define 대신 const enum inline 본문
define
: #define은 특정 값에 이름을 붙이거나 코드를 조합하여 함수형태로 만들 수 있다.
- 매크로를 이용하면 전처리기를 거쳐 소스가 일괄 변환된다.
- 조건부 컴파일
: #ifdef 메크로
코드
#endif //매크로가 정의되어있을 떄 컴파일
- 조건부 컴파일에는 여러가지 조건에 따라 컴파일 여부를 결정할 수 있다.
[C++은 define 대신 const / enum / inline을 권장한다.]
예를들어
#define pi 3.241529
코드가 있다고 가정해보자!
우리에게 pi(기호식이름)가 눈에 보이지만 컴파일러에겐 보이지 않는다. 선행처리자가 컴파일에 넘어가기전에
숫자 상수로 바꾸어 버리기 때문이다.
[해결발법!]
const double pi = 3.141592
장점!
: 컴파일도 눈으로 보인다
: 선행처리자가 3.141592를 n번 반복하여 복사하였던 일이 한 번만 복사를 하면된다.
[but!! 조심해야하는 부분]
1. 상수포인터를 정의하는 경우
: 상수 포인터는 꼭 const로 선언
2. 클래스 맴버로 상수를 정의하는 경우
: 클래스 맴버의 상수는 static 맴버로 만들기
const
const 키워드는 값을 상수로 선언할 수 있도록 도와주는 키워드다. 즉 값을 변경할 수 없다.
const는 read-only memory에 올라가고 변경을 할 수 없다,
const int a = 10;
a = 20; // error!
char greeting[] = "hello";
const char *p = greeting;
char * const p = greeting;
const char * const p =greeting;
//const * => 포인터가 가리키는 대상이 상수
// * const => 포인터 자체가 상수
[const in 함수]
함수전체, 각각의 반환값 매개변수 앞에 사용할 수 있다.
함수 반환값이 상수? 사용자의 에러상황을 줄여준다.
'C++' 카테고리의 다른 글
[2] C 메모리와 포인터 (0) | 2020.05.19 |
---|---|
[1] C 시작하기 (0) | 2020.05.19 |
[C++] 기초 관련 용어 (0) | 2020.05.18 |
Linking / Linker (0) | 2020.05.15 |
암호화 알고리즘 AES-256 (0) | 2020.05.07 |