我想使用像这样的宏
#define Return(x) {call_my_function(); return (x);}
有没有办法使用或声明没有括号的宏,所以我可以像真正的回调而不是函数一样使用它?例如:
BOOL my_func() {
code....
Return FALSE;
}
答案 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)。