2016-12-06 55 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