使用另一个宏的宏的奇怪行为
问题描述:
我有一个关于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中的代码,而不是将此代码解释为宏的一部分?)
答
这组宏可以产生所需的结果。
#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;
}
简单的解决方案 - 为什么你想这样做不使用预处理 – Slava
我可以问吗? – Borgleader
将我传入()以及? –