我正在寻找一种将以下函数结构转换为宏的方法。我知道,这是一个愚蠢且毫无意义的例子,但它说明了这一点,因为我无法给出我的实际源代码。
int foo(int x, int y)
{
do
{
--x;
++y;
}while(x > y);
return x * y; //note that x and y have changed values here.
}
这样我就可以在 main 或其他一些函数中调用该函数,如下所示:
int next_x = foo(x,y);
我似乎无法在这里得到 100% 正确的语法。这是我糟糕的尝试:
#define FOO(x,y) \
( \
do \
{ \
--x; \
++y; \
}while(x < y), \
x \
)
最后x的原因是,理论上我可以做到这一点
int next_x = FOO(x,y);
但相反,我得到一个语法错误,我不知道为什么。任何帮助,将不胜感激。
================================================
附加信息
我还应该注意,我还有其他相应结构的宏:
#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 \
)
所以,我可以并且已经做了以下事情:
float my_flt = NEXT_FLOAT(x,y,temp);