如何在包含C / C ++中的宏的行的末尾添加语句?

时间:2016-11-07 13:05:57

标签: c++ c macros

要减少要写入的行数,我将按以下方式使用宏:

V10 H20 M30

这很有效,因为我只需要使用编码函数调用(带有4个参数)和2个或更多其他语句的宏(带有2个参数)。

当此函数调用是另一个函数的参数时出现问题。 例如,假设我需要以下代码:

#define FUNC(a, b)  func(a, b, threadId, sizeof(a)); \
                      do something 1;                 \
                      do something 2;    

有没有办法使用宏或任何其他替代方法实现此目的? 即我期待的是:

func1(par1, func(a, b, c, d));
do something 1;
do something 2;

2 个答案:

答案 0 :(得分:3)

我不确定你实际上是试图实现的目标,但取而代之的是:

#define FUNC(a, b)  func(a, b, threadId, sizeof(a)); \
                  do something 1;                 \
                  do something 2;  

由此(假设ab参数的类型为int):

int FUNC(int a, int b)
{
  int returnvalue = func(a,b,threadId, sizeof(a));
  do something 1;
  do something 2;
  return returnvalue;
}

应该做的。

答案 1 :(得分:0)

您可以尝试使用方括号{}隔离代码。但是你的想法不是我推荐的,因为代码变得非常难以理解和调试。

#define FUNC(a, b) { func(a, b, threadId, sizeof(a)); \
                      do something 1;                 \
                      do something 2; }

但是如果你试图将它作为参数发送到另一个函数,它仍然无法工作,因为你没有返回任何用作参数的东西(没有地址,没有价值)