2

有没有办法定义可以有一个或零个参数的宏?

我需要在这个例子中使用一些东西:

#define MY_RETURN(ret) return ret;

void foo(){
    MY_RETURN();
}

int foo_integer(){
    MY_RETURN(1);
}

我无法为此找到解决方案。

4

3 回答 3

2

在 C99 及更高版本中,可以使用可变参数宏。

C11 (n1570), § 6.10 预处理指令

# define identifier lparen identifier-list , ... ) replacement-list new-line

您的宏可能类似于:

#define MY_RETURN(...) return __VA_ARGS__

如果您需要计算参数,例如,您可以在此处查看。

于 2013-03-06T14:40:32.307 回答
0

定义两个 MY_RETURN 宏,一个带参数,一个不带!一种重载,但适用于宏。

于 2013-03-06T14:37:10.173 回答
-1

基于如何定义不支持输入参数和同时支持输入参数的宏函数的答案

考虑这样的事情:

#define MY_RETURN(ret) { \
  int args[] = {ret}; \
  if(sizeof(args) > 0) \
    return ret; \
}
于 2013-03-06T14:35:55.293 回答