5

我想使用这样的宏

#define  Return(x)   {call_my_function(); return (x);}

有什么方法可以使用或声明不带括号的宏,所以我可以像真正的返回调用而不是函数一样使用它?例如:

BOOL my_func() {
    code....
    Return FALSE;
}
4

4 回答 4

7

你可以做一些可怕的事情

#define  Return for (call_my_function(); ;) return

编辑:更改为 Daniel 的版本以制作漂亮的笑脸。吉姆直接“重载”的想法return是有效的,甚至更可怕;)

于 2012-08-08T13:04:14.497 回答
2

您可以做一些诡计(尽管强烈建议不要这样做):

#define Return call_my_function(); return

然后像这样使用它:

Return false;

这将扩展到

call_my_function; return false;

编辑:请参阅有关此问题的两条评论作为示例,以了解我为什么不鼓励这种使用。

于 2012-08-08T12:52:41.963 回答
1

考虑

#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;

意图略有不同。

于 2012-08-08T13:11:03.347 回答
0

从定义中删除 { 和 }。

在宏中,确切的字符用于替换(除了 x 也被替换)。

于 2012-08-08T12:52:56.470 回答