c中的一个技巧

CII Chap 04中,对于RETURN的宏定义是:

#define RETURN switch(Exception_stack = Exception_stack->prev, 0) default: return

放在如下的代码中:

TRY

    /* do something */

    if (failed)

      RETURN 1;

EXCETPT(Allocation_Failed)

    /* Handle allocation fail */

END_TRY

展开之后就是:(暂不考虑TRY的宏定义)

TRY

    /* ... */

    if (failed)

        switch(Exception_stack = Exception_stack->prev, 0)

        default:

            return 1;

EXCEPT(Allocation_Failed)

     ...

END_TRY

可以看到,这个宏的唯一目的,就是在return 1之前,执行Exception_stack = Exception_stack->prev语句。

仔细考虑之后可以发现,C语言中其他的结构都不能满足这一条件。如果使用
#define RETURN if(Exception_stack = Exception_stack->prev, 1) return

则在
if (...)
  RETURN 1;
else
  ...
语句中,会导致else的误匹配。

我想到的唯一一个功能相同的语言结构是:
#define RETURN (Exception_stack = Exception_stack->prev, 0) ((void)0) : return

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值