使用另一个宏的宏的奇怪行为

问题描述:

我有一个关于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

将我传入()以及? –

这组宏可以产生所需的结果。

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