In my last two projects I’ve seen the strange guideline, “All Methods/Functions should return error-code using some common ERROR_CODE type”. In both projects ERROR_CODE is an int typedef.
Is there any good reason doing it in C++? Some MISRA requirement or something like that?
I can see only disadvantages:
-
If a function should return a value, it is done by argument reference. e.g.:
string s;
ERROR_CODE err = getString(s); -
The importance of a function is not obvious. All looks the same. The list of errors conntains hundreds of errors from low level errors to some domain specific errors.
Have you experienced this programming style? Are there good arguments against it or for it?
I think it’s a very bad style for several reasons.
My view is that any function/method which has more than a small manageable number of ways it can fail is either overly complex or poorly factored, probably both.
If you really want to return error codes, I would swap things around and pass the pointer to the error code as an argument to the function, and make the actual result the return value. Then I would choose one of these two approaches for implementing the error codes:
intwith a few universal error classes.A better approach if you’re using C++ would probably be using exceptions…