是否有一个宏在没有括号的情况下扩展返回?

时间:2012-08-08 12:49:49

标签: c c-preprocessor parentheses

我想使用像这样的宏

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

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

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

4 个答案:

答案 0 :(得分:7)

你可以做一些可怕的事情

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

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

答案 1 :(得分:2)

你可以做一些诡计(尽管强烈反对):

#define Return call_my_function(); return

然后像这样使用它:

Return false;

这将扩展到

call_my_function; return false;

编辑:请参阅这个问题的两条评论作为示例,以了解我为何不鼓励这种用法。

答案 2 :(得分: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;

意图略有不同。

答案 3 :(得分:0)

从定义中删除{和}。

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