通用宏,可以有零个或一个参数

时间:2013-03-06 14:29:54

标签: c macros c-preprocessor

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

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

#define MY_RETURN(ret) return ret;

void foo(){
    MY_RETURN();
}

int foo_integer(){
    MY_RETURN(1);
}

我无法找到解决方法。

3 个答案:

答案 0 :(得分:2)

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

  

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

     

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

您的宏可能类似于:

#define MY_RETURN(...) return __VA_ARGS__

如果您需要计算参数,可以查看here

答案 1 :(得分:0)

基于How to define macro function which support no input parameter and support also input parametr in the same time

的答案

考虑这样的事情:

#define MY_RETURN(ret) { \
  int args[] = {ret}; \
  if(sizeof(args) > 0) \
    return ret; \
}

答案 2 :(得分:0)

定义两个MY_RETURN宏,一个带参数,一个没有!一种重载,但对于宏。