以下哪兩種實現方式的,在編碼風格的方面之前測試中的錯誤和清理?正確的方法來回報
UINT Fn1()
{
HKEY hRegKey;
if(RegOpenKeyEx(..., KEY_NAME, &hRegKey) != ERROR_SUCCESS)
return ERROR_KEY_OPEN;
if(RegQueryValueEx(hRegKey, VAL_A_NAME, ...) != ERROR_SUCCESS)
{
RegCloseKey(hRegKey);
return ERROR_KEYVAL_A;
}
if(RegQueryValueEx(hRegKey, VAL_B_NAME, ...) != ERROR_SUCCESS)
{
RegCloseKey(hRegKey);
return ERROR_KEYVAL_B;
}
RegCloseKey(hRegKey);
return ERROR_SUCCESS;
}
UINT Fn2()
{
UINT rVal;
HKEY hRegKey;
if(RegOpenKeyEx(..., KEY_NAME, &hRegKey) == ERROR_SUCCESS)
{
if(RegQueryValueEx(hRegKey, VALUE_A_NAME, ...) == ERROR_SUCCESS)
{
if(RegQueryValueEx(hRegKey, VALUE_B_NAME, ...) == ERROR_SUCCESS)
rVal = ERROR_SUCCESS;
else
rVal = ERROR_KEYVAL_B;
}
else
rVal = ERROR_KEYVAL_A;
RegCloseKey(hRegKey);
}
else
rVal = ERROR_KEY_OPEN;
return rVal;
}
此外,有沒有靜止更好的辦法?
注:請不要無變亂的片段的細節 - 強調碼流和風格。
這個答案將是C或C++不同,但你有標記。而且,這是一個相當主觀的問題。 – Benj
請回答 - 對於*通用情況*。我沒有把這個問題轉化爲更通用的形式,讓它變得更真實。 –
這個問題已經被問過:[這裏](http://stackoverflow.com/q/4369822/274261)和[Programmers.SE(http://programmers.stackexchange.com/q/18454)。這兩次,回答者都喜歡「早日退貨」(即您的第一個版本) – ArjunShankar