(수근수근)

[C++] #define 대신 const enum inline 본문

C++

[C++] #define 대신 const enum inline

InformationFarm 2020. 5. 18. 13:15

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
Comments