我想定义一个像 MACRO 这样的函数。 IE。
#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
。它可以取代foo(33)
with (2*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
and #endif
预处理器指令,但如果将变量传递给宏并想要计算它们的值,则需要使用语言构造。使用if
, and else
实际语言结构中的语句也不起作用,因为控制流语句不计算值。换句话说,if 语句仅控制控制流(“如果 A,则执行 B,否则执行 C”),而不评估任何值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)