0
#include <stdio.h>
#include <AssertMacros.h>

int main( int argc, char* argv[] )
{
    int error = 1;

    verify_noerr( error );
    require_noerr( error, Oops );  //<---- Is Oops a callback method?

    printf("You shouldn't be here!\n");

Oops: ;                    // <--v____  Is this a method declaration?
    return error;          // <--^        Why the ':' followed by the ';'?
}

このコードは、2006 年の iOS ドキュメントからのものです。C では、戻り値の型が宣言されていないメソッドのデフォルトの戻り値の型が int であることを認識しています。しかし、これは本当にその原理に頼った方法なのでしょうか? そして、なぜコロンセミコロン? 私の最後の考えは、それが C ブロックであるというものでしたが、ウィキペディアはそうではないと言っています

私は困惑しています。

4

2 に答える 2

2

これ:

Oops: ;

のターゲットにできるラベルですgoto

エラーコードの場合、指定されたラベルにrequire_noerr展開されるマクロだと思います。gotoerror

このシステムを使用して、エラーが発生したときに関数を終了します。ラベルと関数の終わりの間のコードをクリーンアップできます (単純なものでif (error) return;はできません)。

于 2013-04-27T22:02:28.690 に答える
1

これは、C プログラミングではラベルと呼ばれます。

Cコードでは、gotoを使用してこのラベルにジャンプできます

goto Oops;
于 2013-04-27T22:02:17.310 に答える