一个do while的小技巧
在资源初始化的代码块中,除了用goto可以用作出错处理之外
还可以使用do { } while(0)
使用break就可以跳出来进行出错处理,缺点是少了标签的层次出错处理。
C++实例代码:截自Mac OSX USB驱动
1 do { 2 if(!newDevice->init(deviceAddress, powerAvaliable, speed, maxPacketSize)) 3 break; 4 if(!newDevice->attach(this)) 5 break; 6 if(!newDevice->start(this)) { 7 newDevice->detach(this); 8 newDevice->release(); 9 break; 10 } 11 12 return (KIOReturnSuccess); 13 } while(false); 14 15 return (KIOReturnNoMemory);