Wprowadzanie pętli do makra C
Szukam sposobu konwertowania następującej struktury funkcji na makro. Wiem, że to głupi i bezsensowny przykład, ale ilustruje to punkt, ponieważ nie mogę podać mojego rzeczywistego kodu źródłowego.
int foo(int x, int y)
{
do
{
--x;
++y;
}while(x > y);
return x * y; //note that x and y have changed values here.
}
Żeby móc wywołać funkcję w głównej lub innej takiej funkcji:
int next_x = foo(x,y);
Wydaje mi się, że nie mam tutaj 100% poprawnej składni. To moja biedna próba:
#define FOO(x,y) \
( \
do \
{ \
--x; \
++y; \
}while(x < y), \
x \
)
Uzasadnienie dlax na końcu jest tak, że teoretycznie mógłbym to zrobić
int next_x = FOO(x,y);
ale zamiast tego otrzymuję błąd składniowy i nie jestem pewien dlaczego. Każda pomoc byłaby doceniana.
===============================================
Dodatkowe informacjePowinienem również zauważyć, że mam inne makra, które są odpowiednio skonstruowane:
#define INIT(x,y)
(
x = //something,
y = //something
)
#define NEXT_INT(x,y) \
( \
INIT(x,y), \
get_next_num(x,y) \ //Note, this is an inline function call , not a macro.
)
#define NEXT_FLOAT(x,y,temp) \
( \
temp = NEXT_INT(x,y), \
temp ? temp * 1.23456 : FLT_MIN \
)
I tak mogę i zrobiłem co następuje:
float my_flt = NEXT_FLOAT(x,y,temp);