2 sanmaofly sanmaofly 于 2013.03.29 09:39 提问

求教下这个 “bail:” 这是什么语法? 咋没见过
bail:
    if ( err && image ) {
        CGImageRelease( image );
        image = NULL;
    }
    if ( provider ) CGDataProviderRelease( provider );
    if ( colorspace ) CGColorSpaceRelease( colorspace );
    *imageOut = image;
    return err;

上述代码的 bail: 部分是什么意思,咋没见过这种代码风格?
代码源自ios example SquareCam(http://developer.apple.com/library/ios/#samplecode/SquareCam/Introduction/Intro.html)

2个回答

g989_1314125
g989_1314125   2013.03.29 12:32
已采纳

这是goto语句跳转的标签。

你正在看的代码:SquareCamViewController.m。使用了一个宏命名require,像这样:

require( error == nil, bail );

这个宏是在AssertMacros.h头文件中定义。他将标签作为第二参数,如果第一参数的值为false使用goto

在C中,使用goto和标签来跳转清除函数结尾的代码是最常用的方法。

MrsSeven7
MrsSeven7   2013.03.29 11:19

bail:是一个标签,这是标准的C语法。在普通的代码中很少用。最常用的方法是和goto一起用,但是请最好不要用goto这个语法。

你给的链接中的代码是用在require函数中,如果require失败,代码就会将中间的代码都跳过,直接跳回到bail标签。

g989_1314125
g989_1314125 goto语法不是你说的那么不好吧
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!