Czy to możliwe, aby napisać makro preprocesora takie, które przekształcić zmienną liczbę argumentów do kolejnych wywołań funkcji, takich jakC Makro ekspansja na stwardnienie wywołań funkcji
MAP(f, 1, 2, 3, ..., n)
do
f(1); f(2); f(3); ... f(n);
So daleko, mam następujące, które wydaje się działać:
#define MAP(f, t, ...) \
{\
t __varlist[] = {__VA_ARGS__};\
for(int i = 0; i < sizeof(__varlist)/sizeof(t); i++)\
f(__varlist[i]);\
}
Pamiętaj, że to makro es parametr typu, aby był bardziej przydatny.
Czy można to zrobić bez zadeklarowania tymczasowego? Czy to nie ma znaczenia, ponieważ kompilator jest tak inteligentny, że wszystko odczytuje? Jestem trochę nowych do C
Jeśli nie ma sposobu, aby to zrobić w jednym przejściu musisz stwardnienie pre-procesor przechodzi. http://pl.wikipedia.org/wiki/M4_(komputer_language) –
@JohnSmith jest to oczywiście możliwe, jeśli wygenerujesz więcej bałaganu ...;) – Gleno
Nie jest dla mnie oczywiste, ponieważ nie wiem wszystkiego o procesor, a więc kwalifikator if. Wygląda na to, że oba sposoby są rozsądne: P –