티스토리 뷰

기본에 충실하기를..

코딩도장 복습하면서 공부하는 공간


1. 누가 나에게 매크로를 왜 사용하는지 물어본다면?(매크로 사용 목적)


일단 생각나는데로 말해보도록


1) 공통적으로 사용하면 것(변수, 함수 등)을 매크로로 정의함으로써 수정-용이성을 향상시키기 위해


-->


#define SPEED_OF_LIGHT 3


위와 같이 정의하고 SPEED_OF_LIGHT가 필요한 부분에서 SPEED_OF_LIGHT를 사용한다고 하자.

만일 SPEED_OF_LIGHT의 값을 2.9로 수정하고 싶다면 #define 부분에서 값을 수정하면 되고, 그 결과는 SPEED_OF_LIGHT를 사용하는 모든 부분에 적용된다.


반대로 위와 같이 매크로를 사용하지 않고 하나하나 3을 입력하는 경우를 생각해보자. 숫자를 2.9로 수정하기 위해서는 하나하나 찾아가며 고쳐야하는 불편함이 있다. 이러한 불편한을 줄여주기 위해서 매크로를 사용한다고 생각하면 된다.


2)..

3)..


2. 매크로를 매크로로 정의할 수 있다.


#define SPEED_OF_LIGHT 3

#define MAX_SPEED SPEED_OF_LIGHT


--> 두 번째 줄에서 MAX_SPEED를 SPEED_OF_LIGHT로 정의할 수 있다. MAX_SPEED의 값은 3이다.


3. 매크로의 기본 원리는 치환(substitution)이다?


#define SPEED_OF_LIGHT 3


위와 같은 매크로를 정의하고 SPEED_OF_LIGHT가 필요한 부분에서 사용한다고 한다고 하자.


컴파일이 시작되기 전에, 혹은 컴파일의 초기에?

전처리기에 의해서 SPEED_OF_LIGHT가 3으로 치환(substitution)된다.


4. 빈 매크로(like.. #define __BLAH__)를 작성하는 이유는 [     ]을 위해서이다.


해더파일을 include 하기 전에 그 해더파일과 관련된 빈 매크로를 작성하는 경우를 종종 볼 수 있다.

그렇게 하는 이유는 무엇일까?


ex) 


#define GLM_MESSAGES

#define GLM_FORCE_RADIANS


#include <glm/glm.hpp>

#include <glm/gtc/matrix_transform.hpp>

#include <glm/gtc/type_ptr.hpp>


위와 같이 GLM_MESSAGES와 GLM_FORCE_RADIANS를 빈 매크로로 정의하면 어떤 효과를 낼 수 있을까?

답은 조건부 컴파일을 하기 위함이다.


예를 들면 빈 매크로 아래 줄에 include된 해더파일에 다음과 같은 매크로가 있다고 하자.


#ifdef GL_MESSAGES

// DO A

#else

// DO B

#endif


위와 같은 매크로가 해더파일에 있다면, (그 해더파일을 include하기 전에 GL_MESSAGE를 정의하였으므로) DO A를 실시한다. 


즉, 조건부 컴파일을 위하여 빈 매크로를 사용한다.


아! 굳이 빈 매크로일 필요는 없다!!

이는 조건부 컴파일 글에서 추가적으로 다루도록 하겠다.




5. 함수 모양의 매크로를 정의할 수 있다.


6. 매크로로 함수를 정의할 때 do{}while(0)을 사용하면 [변수 재정의에 의한 컴파일 에러]를 방지할 수 있다.













댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함