这种使用goto的代码怎么改比较优雅?这算糟糕的代码风格吗?
HRESULT AddSourceNode(
IMFTopology *pTopology, // Topology.
IMFMediaSource *pSource, // Media source.
IMFPresentationDescriptor *pPD, // Presentation descriptor.
IMFStreamDescriptor *pSD, // Stream descriptor.
IMFTopologyNode **ppNode) // Receives the node pointer.
{
IMFTopologyNode *pNode = NULL;
// Create the node.
HRESULT hr = MFCreateTopologyNode(MF_TOPOLOGY_SOURCESTREAM_NODE, &pNode);
if (FAILED(hr))
{
goto done;
}
// Set the attributes.
hr = pNode->SetUnknown(MF_TOPONODE_SOURCE, pSource);
if (FAILED(hr))
{
goto done;
}
hr = pNode->SetUnknown(MF_TOPONODE_PRESENTATION_DESCRIPTOR, pPD);
if (FAILED(hr))
{
goto done;
}
hr = pNode->SetUnknown(MF_TOPONODE_STREAM_DESCRIPTOR, pSD);
if (FAILED(hr))
{
goto done;
}
// Add the node to the topology.
hr = pTopology->AddNode(pNode);
if (FAILED(hr))
{
goto done;
}
// Return the pointer to the caller.
*ppNode = pNode;
(*ppNode)->AddRef();
done:
SafeRelease(&pNode);
return hr;
}
每一步都要判断有么有成功。不成功的操作都是一样的,怎么改呢?
我想到用一种局部变量来管理清理代码,把要执行的清理操作放在局部变量的析构函数中。在函数开头就定义一个局部变量,反正函数退出时,局部变量的析构函数是会自动调用的。但是这样无缘无故多了个局部变量,而且定义后没对它执行任何操作,会不会让人看不懂?
...全文
相关推荐
对Python3 goto 语句的使用方法详解
在Python中,通常有更优雅的替代方案,如使用`break`、`continue`语句来控制循环,或者使用异常处理(`try/except/finally`)来实现特殊流程。
goto语句浅谈 主要介绍了goto语句的使用注意事项等。
另外一些人认为,goto语句使用起来比较灵活,而且有些情形能提高程序的效率。关于goto语句的解决方法1974年,D.E.
lua 5.2 中GOTO语句的使用
然而,在某些特定场景下,合理使用`GOTO`能够简化代码逻辑,提高编程效率。本文将详细介绍 Lua 5.2 中 `GOTO` 语句的使用方法,并通过具体的示例来帮助读者更好地理解和掌握这一特性。
PHP goto语句简介和使用实例
下面通过两个实例来进一步说明PHP goto语句的使用:第一个实例是一个简单的goto使用示例,演示了如何在一个代码块中使用goto跳过部分代码:```php<?
C语言编程规约(形成良好的代码风格)
- **禁用GOTO语句**:虽然不是绝对禁止,但应尽量避免,因其可能导致代码难以追踪。- **更新原有代码**:修改现有代码时同步更新文档,保持代码与文档的一致性。#### 3.


