2017-10-11 13 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; 
} 
関連する問題