我想使用这样的宏
#define Return(x) {call_my_function(); return (x);}
有什么方法可以使用或声明不带括号的宏,所以我可以像真正的返回调用而不是函数一样使用它?例如:
BOOL my_func() {
code....
Return FALSE;
}
我想使用这样的宏
#define Return(x) {call_my_function(); return (x);}
有什么方法可以使用或声明不带括号的宏,所以我可以像真正的返回调用而不是函数一样使用它?例如:
BOOL my_func() {
code....
Return FALSE;
}
你可以做一些可怕的事情
#define Return for (call_my_function(); ;) return
编辑:更改为 Daniel 的版本以制作漂亮的笑脸。吉姆直接“重载”的想法return
是有效的,甚至更可怕;)
您可以做一些诡计(尽管强烈建议不要这样做):
#define Return call_my_function(); return
然后像这样使用它:
Return false;
这将扩展到
call_my_function; return false;
编辑:请参阅有关此问题的两条评论作为示例,以了解我为什么不鼓励这种使用。
考虑
#define Return(x) {call_my_function(); return (x);}
if (1) Return (0);
Woule 展开为
if (1) {call_my_function(); return (1);}
有些人建议您可以使用 summat 之类的
#define Return call_my_function(); return
现在
if (1) Return;
将扩展到
if (1) call_my_function();
return;
意图略有不同。
从定义中删除 { 和 }。
在宏中,确切的字符用于替换(除了 x 也被替换)。