본문 바로가기
Programming/C++

[C++] define은 작성된 순서대로 수행 될까?

by ★용호★ 2015. 9. 10.


#define NUM 10

#define FOO NUM

#undef NUM

#define NUM 20


1. NUM을 10으로 define 한다.

2. 그리고 나서 FOO를 NUM으로 define 한다.

3. NUM을 undefine 한다.

4. 다시 NUM을 10으로 define 한다.


여기서 FOO는 10일까? 20일까? 


 define 전처리기는 설정된 값을 컴파일 전에 전부 치환하는 작업을 수행하는데 순서대로 수행한다면 FOO에 대입된 NUM이 당시에는 10이었으니까 10으로 치환되서 FOO에는 10이 할당될 것으로 생각이 든다. 

 하지만 결과를 보면 FOO에는 20으로 할당되어 있다. Stack Overflow에 포스팅 된 글을 보면 프로그램은 절대 사용되지 않을 define에 대해서 효율적으로 변환하는 작업을 거친다고 한다. 

 그래서 결과적으로 위의 4 line의 코드는 아래와 같이 변환된다. 


#define FOO NUM

#define NUM 20



참고 : http://stackoverflow.com/questions/32147438/why-is-this-macro-replaced-as-20-instead-10


댓글