这种使用goto的代码怎么改比较优雅?这算糟糕的代码风格吗?

善良超锅锅 善良超锅锅 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
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;
}


每一步都要判断有么有成功。不成功的操作都是一样的,怎么改呢?

我想到用一种局部变量来管理清理代码,把要执行的清理操作放在局部变量的析构函数中。在函数开头就定义一个局部变量,反正函数退出时,局部变量的析构函数是会自动调用的。但是这样无缘无故多了个局部变量,而且定义后没对它执行任何操作,会不会让人看不懂?
...全文

相关推荐

评论 12
收藏 已收藏
分享
返回顶部
善良超锅锅
C++ 语言 65,214 成员 250,514 内容