2016-12-06 61 views
0

我閱讀和OpenThread一些C++代碼,我從來沒有編程,C++,但我想知道什麼exit:確實接近底部,然後return error;是什麼退出:做

什麼是與具有exit:的區別並且沒有一個

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

它的標籤,在這裏http://en.cppreference.com/w/cpp/language/goto – Stargateur

+0

DOC這看起來像一個goto標籤。在任何情況下,在C++中使用goto都是非常令人沮喪的。另外,我真的不確定爲什麼當你從來沒有用C++編程時,你爲什麼要閱讀一些線程錯誤。 –

+1

@MarošBeťko我們能不能進入這個...... goto有合理的好用途,就像打破嵌套循環或清理資源一樣(當你不覺得像RAII-封裝API暴露的每一種類型時)。 – user1610015

回答

4

這是GOTO語句的標記。

它允許程序從(幾乎)代碼中的任意點跳轉到該標記。這通常用於硬件編程或嵌入式編程,例如,如果您不能從深度嵌套結構中返回,而不使用大量的陳述或類似的情況。

3
exit: 

它是與goto一起使用的標籤。這種gotolable通常用於在發生某些錯誤時跳出代碼塊。

+0

對於錯誤條件應該使用例外... –

+0

@MarošBeťko我想他只是描述了這個代碼中的「退出」標籤的意圖。他並不認爲這是一個在C++中的好習慣。 – Stargateur

+0

@MarošBeťko這段代碼是針對嵌入式/硬件編程bash.d提到的,這是硬件編程中的一個有用語句。 我想這可能是硬件編程 – Albert

3

其他答案是正確的,但沒有說清楚標籤可以是任何不是保留關鍵字的詞。 exit就是這樣一個名字。

還有一件事,在你的例子,其中有沒有相應的goto exit;正常的程序執行簡單的繞過了標籤,但對功能沒有任何影響。

+0

這解決了很多困惑。謝謝! – Albert