2011-09-10 2 views
0

#define은 const 변수를 "덮어 씁니다"또는 그 반대로 할 수 있습니까? 또는 컴파일러 오류가 발생합니까?우선 순위 #define 대 const 선언

//ONE 
#define FOO 23 
const int FOO = 42; 

//TWO 
const int FOO = 42; 
#define FOO 23 

FOO는 두 가지 경우 모두 42 또는 23을 가질 수 있습니까?

+0

가장 쉬운 방법은 '# 뭔가를 define' 후 같은 단지 찾기 + 모든 줄에 검색을 교체합니다. – Schnommus

답변

8

처음으로 컴파일 오류가 발생합니다. 매크로는 정의 시점부터 볼 수 있습니다. 매크로 이후

//TWO 
const int FOO = 42; 
#define FOO 23 //if you use FOO AFTER this line, it will be replaced by 23 

constenum 매크로 위에 바람직 ++ C에서, 벙어리 :

//ONE 
#define FOO 23 
const int 23= 42; //which would cause compilation error 

그리고 두 번째이됩니다이다

먼저 한 것과 같다. 매크로가 왜 나쁜지 설명하는 내 대답을 확인하십시오. constenum이 좋습니다.