我想定义一个像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)))
static int foo(int x) { if(x > 32) return x; return 2 * x; }
然后你也可以把东西传递到有副作用的foo,副作用只发生一次.
您所编写的是使用#if,#else和#endif预处理程序指令,但如果将变量传递给宏并想要评估它们的值,则需要使用语言结构.在实际语言结构中使用if和else语句也不起作用,因为控制流语句不会计算为值.换句话说,if语句只是转向控制流(“如果A,则执行B,否则执行C”),而不是评估任何值.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。