2017-10-11 3 views
3

C++의 매크로에 대한 질문이 있습니다.다른 매크로를 사용하는 매크로의 이상한 동작

내 코드 :

#define a [i] 
#define b(i) t a 

int main(){ 
int t[10]; 
int i=0; 
b(i+1)=1; 
} 
전처리 후

구인 결과는 않습니다 그것의 일 :

int main(){ 
int t[10]; 
int i=0; 
t[i+1]=1; 
} 

실제 결과 :

int main(){ 
int t[10]; 
int i=0; 
t[i]=1; 
} 

내가 무슨 일이 일어나고 있는지 이해하지만, 어떤 방법이 내가 원하는대로 할 전 처리기를 강제 할 수 있습니까? (매크로 b의 코드를 매크로의 일부로 해석하는 것보다 먼저 코드를 대체 하시겠습니까?)

+5

간단한 솔루션 - 당신이이 일을하려는 이유 – Slava

+1

내가 물어 봐도 처리기를 사용하지 않는? – Borgleader

+0

I를()로도 전달 하시겠습니까? –

답변

4

이 매크로 집합은 원하는 결과를 생성합니다.

#define a(i) [i] 
#define b(i) t a(i) 

예 Test.cpp에

#define a(i) [i] 
#define b(i) t a(i) 

int main(){ 
int t[10]; 
int i=0; 
b(i+1)=1; 
} 

그리고 출력이 g++ -E test.cpp되어 사용 :

# 1 "test.cpp" 
# 1 "<built-in>" 
# 1 "<command-line>" 
# 1 "/usr/include/stdc-predef.h" 1 3 4 
# 1 "<command-line>" 2 
# 1 "test.cpp" 



int main(){ 
int t[10]; 
int i=0; 
t [i+1]=1; 
}