/ / Dziwne zachowanie makra, które używa innego makra - c ++, preprocesora

Dziwne zachowanie makra, które używa innego makra - c ++, preprocesor

Mam pytanie dotyczące makr w C ++;

Mój kod:

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

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

Poszukiwany wynik po wykonaniu zadania przez preprocesora:

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

Aktualny rezultat:

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

Rozumiem, co się dzieje, ale czy jest jakiś sposób, w jaki mogę zmusić preprocesora do robienia tego, co chcę? (więc najpierw zamień kod w makrze b, zamiast interpretować ten kod jako część makra?)

Odpowiedzi:

4 dla odpowiedzi № 1

Ten zestaw makr daje pożądany rezultat.

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

Przykład test.cpp

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

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

Następnie za pomocą g++ -E test.cpp wynik to:

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