2016-12-06 12 views
0

を行う、私はCをプログラムしたことがありません++が、私はexit:exit:を持つとの違いは何return error;は、出口を何:私はopenThreadのためのいくつかのC++のコードを読んでいる

続い下部近くに何を知りたいと思いました1つも持っていない

ThreadError otGetParentInfo(otInstance *aInstance, otRouterInfo *aParentInfo) 
{ 
    ThreadError error = kThreadError_None; 
    Router *parent; 

    VerifyOrExit(aParentInfo != NULL, error = kThreadError_InvalidArgs); 

    parent = aInstance->mThreadNetif.GetMle().GetParent(); 
    memcpy(aParentInfo->mExtAddress.m8, parent->mMacAddr.m8, OT_EXT_ADDRESS_SIZE); 
    aParentInfo->mRloc16 = parent->mValid.mRloc16; 

exit: 
    return error; 
} 
+1

こちらのラベルはdocです。http://en.cppreference.com/w/cpp/language/goto – Stargateur

+0

これはgotoラベルのようです。 gotoを使用することは、C++のあらゆる状況下では非常にお勧めできません。また、C++でプログラミングしたことがないときに、なぜスレッドエラーについて読んでいるのかは分かりません。 –

+1

@MarošBeťko私たちはこれに入ることはできません...ネストされたループを中断したり、リソースをクリーンアップしたりするような、正当なgotoの使用法があります。 – user1610015

答えて

4

これはGOTOステートメントのマークです。

これは、コード内の(ほとんど)ポイントからプログラムがこのマークにジャンプできるようにします。これは、多くのbreakステートメントや類似の状況を使わずに深くネストされた構造から戻ることができない場合に、通常ハードウェアプログラミングや組み込みプログラミングで使用されます。

3
exit: 

それはgotoと一緒に使用されるラベルです。このgotolableは、通常、何らかのエラー状態が発生したときにコードのブロックから飛び出すために使用されます。

+0

エラー条件には例外を使用する必要があります。 –

+0

@MarošBeťko私は彼が、このコード内のラベル「終了」が意図していることを説明していると思います。彼はそれがC++の良い習慣であるとは言いません。 – Stargateur

+0

@MarošBeťkoコードの一部は、組み込み/ハードウェアプログラミングのbash.dです。これは、ハードウェアプログラミングの役に立つステートメントです。 これはハードウェアプログラミングの良い練習になると思われます。 – Albert

3

他の回答は正しいですが、ラベルが予約済みのキーワードではない単語であることが明確ではありません。 exitはそのような名前の1つです。

また、対応するgoto exit;プログラムの実行がない場合の例では、ラベルをバイパスするだけで機能には関係しません。

+0

それは多くの混乱を修正しました。ありがとう! – Albert

関連する問題