To wszystko jest kwestią preferencji zarówno z korzyściami, jak i upadkami.
Twarde kodowanie literałów literowych na stronie błędu może być trudniejsze do utrzymania, ale jest również łatwiejsze do odczytania w mojej szczerej opinii.
np
cout << "You were unable to login. "
<< "Please check you're user name and password and try again"
<< endl;
pokazuje zamiar dużo lepiej niż
cout << LOGIN_CREDENTIALS_ERROR << endl;
Jednakże, boki plus nie trudno kodowania wiadomości (zarówno 2
i 3
):
//Foo.cpp:
cout << DIVIDE_BY_ZERO_ERROR << endl;
//Bar.cpp
cout << DIVIDE_BY_ZERO_ERROR << endl;
// If you want to change DIVIDE_BY_ZERO_ERROR text you only have to do it once
//ErrorMessages.h (Ops grammar needs correcting)
const std:string DIVIDE_BY_ZERO_ERROR = "Dont not divide by zero";
Ponadto, jeśli komunikaty o błędach mogą ulec zmianie:
// ErrorMessages.h
#ifdef LOCALIZATION_EN
const std:string FRIENDLY_ERROR = "Hello, you are doing something wrong";
#elseif LOCALIZATION_FR
const std:string FRIENDLY_ERROR = "Bonjour, ...";
...
lub
// ErrorMessages.h
#ifdef DEBUG
const std:string SOME_ERROR = "More detailed error information for developers"
#else
const std:string SOME_ERROR = "Human friendly error message"
#endif
Pierwszy sposób nie jest zbyt przyjazne dla lokalizacji. – qdii
Obsługa wyjątków? – Rapptz
... Aaaaaand, komunikaty o błędach przechodzą do 'cerr', a nie do' cout'. –