コーディング スタイルに関して、次の 2 つの実装のうちどちらが優れていますか。また、その理由は何ですか?
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;
}
また、まだ良い方法はありますか?
注: スニペットの詳細に惑わされないようにしてください。コード フローとスタイルを強調してください。