C函数,其参数数量取决于预编译开关



我使用的代码会根据一些预编译开关做很多不同的事情。这需要更改某些函数的参数数量。现在,为了定义函数,我做了如下操作:

#define OPTION
#ifdef OPTION
function(int a){
#else
function(int a,int b){
#endif
int c=a+1;
#ifndef OPTION
c += b;
#endif
return c;
}

除了emacs缩进一开始就被两个打开的大括号弄得一团糟之外(如果你知道如何解决这个问题,请帮忙(,这是推荐的方法还是有更简单的方法?我已经考虑过使用...使用数量不详的参数,但这会使代码变得混乱,对我来说也不太安全

编辑:Ian Abbott在下面提出的解决方案似乎很有吸引力,但它对我的gcc不起作用。这是我最终发现的,它允许不以最小的差异对同一函数进行多次重新定义。(这可能是他想的,评论格式不允许让答案足够具体。(

void  function(int a
#ifdef OPTION
, int b
#endif
){
int c=a+1;
#ifndef OPTION
c += b;
#endif
return c;
}

您可以这样做,只需将整个函数放在if指令中。

#define OPTION_A
#ifdef OPTION_A
int add(int x){
return x+=1;
}
#else
int add(int x, int y){
return x+y;
}
#endif
int main(int argc, const char * argv[]) {
printf("%d",add(10));
return 0;
}

最新更新