2017-10-11 68 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

將我傳入()以及? –

回答

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; 
}