C语言中类似函数的宏定义

前端之家收集整理的这篇文章主要介绍了C语言中类似函数的宏定义前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想定义一个像MACRO这样的函数.即
#define foo(x)\
#if x>32\
 x\
#else\
 (2*x)\
#endif

那是,

if x>32,then foo(x) present x
else,foo(x) present (2*x)

但我的海湾合作委员会抱怨:

int a = foo(31);

我认为C预处理器应该正确处理.因为在编译时,它知道x = 33.它可以用(2 * 33)代替foo(33)

解决方法

你可以如下
#define foo(x) ((x) > 32 ? (x) : (2 * (x)))

但是多次评估x.您可以改为创建一个更干净的静态函数

static int foo(int x) {
  if(x > 32) 
    return x;
  return 2 * x;
}

然后你也可以把东西传递到有副作用的foo,副作用只发生一次.

您所编写的是使用#if,#else和#endif预处理程序指令,但如果将变量传递给宏并想要评估它们的值,则需要使用语言结构.在实际语言结构中使用if和else语句也不起作用,因为控制流语句不会计算为值.换句话说,if语句只是转向控制流(“如果A,则执行B,否则执行C”),而不是评估任何值.

猜你在找的C&C++相关文章