我正在寻找一种将以下函数结构转换为宏的方法。我知道,这是一个愚蠢且毫无意义的例子,但它说明了这一点,因为我无法给出我的实际源代码。
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);