Macht es immer Sinn, jede Ausnahme "nur um sicher zu gehen" zu erfassen? Zum Beispiel:Fängt (...) immer Sinn?
try
{
Socket_Listen();
if(Return_Value == SOCKET_ERROR)
{
throw SOCKET_LISTEN_ERROR;
}
__LOG__ << "Listening..." << endl;
}
catch(EError_ID)
{
__LOG__;
Get_Last_Error_As_String(__FUNCTION__);
}
catch(...)
{
__LOG__ << "WARNING: An unknown error occurred." << endl;
}
Ich werfe einen Fehler ich selbst definiert haben (SOCKET_LISTEN_ERROR
), die Teil eines größeren Enum ist, die mehrere Fehlerkennungen enthält. Ist es möglich, dass hier eine andere Ausnahme geworfen wird, außer der, die ich geworfen habe? Aus Gründen der Vollständigkeit, hier ist Socket_Listen()
:
void CTCPServer::Socket_Listen()
{
Return_Value = listen(Socket,
2);
}
Ich denke, es ist besser zu wissen, dass einige Ausnahmen passieren können _ und nur sie fangen. Wenn eine andere Ausnahme auftritt, könnte dies möglicherweise bedeuten, dass ein Fehler in Ihrem Code vorliegt. Indem Sie mit 'catch (...)' fangen, werden Sie die Informationen über die Ausnahme los, was nicht gut ist. – ForceBru
'Aus Gründen der Vollständigkeit" Machst du Witze? [So erstellen Sie ein minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve). Es scheint, dass Sie alles, was Sie wissen, verwechselt haben: Ausnahmen, errno-ähnliche Variablen, Rückgabecodes. Wählen Sie eine Fehlerbehandlungsstrategie und bleiben Sie dabei. Manchmal Leute [Ausnahmen deaktivieren] (http://programmers.stackexchange.com/questions/113479/are-there-any-real-world-cases-for-c-without-exceptions) (es ist üblich, zum Beispiel in gamedev). – Drop
Der einzige wirkliche gute Zweck, um alle Ausnahmen zu erfassen, besteht darin, an einem bestimmten Punkt etwas wirklich/wirklich/wirklich Unerwartetes zu protokollieren. Sie werfen dann ** die Ausnahme ** neu. –