Colocando o laço dentro da macro C
Eu estou procurando uma maneira de converter a seguinte estrutura de função para uma macro. Eu sei, é um exemplo tolo e inútil, mas ilustra o ponto, já que não posso dar meu código-fonte real.
int foo(int x, int y)
{
do
{
--x;
++y;
}while(x > y);
return x * y; //note that x and y have changed values here.
}
Para que eu possa chamar a função main ou alguma outra função da seguinte forma:
int next_x = foo(x,y);
Eu não consigo obter a sintaxe 100% correta aqui. Esta é minha pobre tentativa:
#define FOO(x,y) \
( \
do \
{ \
--x; \
++y; \
}while(x < y), \
x \
)
O raciocínio para ox no final é para que eu pudesse, em teoria, ser capaz de fazer isso
int next_x = FOO(x,y);
mas, em vez disso, recebo um erro de sintaxe e não sei por quê. Qualquer ajuda seria apreciada.
===============================================
Informação adicionalTambém devo observar que tenho outras macros que são estruturadas de acordo:
#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 \
)
E assim, posso e fiz o seguinte:
float my_flt = NEXT_FLOAT(x,y,temp);