Я часто использую коды ошибок, когда ошибка должна быть передана пользователю, поскольку они могут быть интернационализированы. Например, в компиляторе, если есть ошибки в коде пользователя, ошибки могут сигнализироваться в бэкэнде компилятора, тогда как интерфейс может локализовать их в потоках культуры/языка для пользовательского потребления. Однако перечисления могут быть лучше для этой цели, чем исходные целые числа.
Я также использовал их для создания фреймворка «сообщений об ошибках» для приложения. Когда были исключены исключения, они были выброшены с кодом ошибки, который, когда будилось исключение, был отправлен (с журналом) на центральный сервер. Код помог организовать базу данных, чтобы мы могли проверять журналы, связанные с конкретной ошибкой.
Наконец, как уже упоминалось в паре других ответов, коды ошибок легко и от языка к Google (думают, коды ошибок Windows/MS KB статьи), так что код ошибки с описание того, что пошло не так, может быть лучше для конечных пользователей технического продукта.
Идея кодов ошибок полезна, но IMO они принадлежат как члены исключения или как параметры для интерфейса IErrorReporter или что-то большее, чем как возвращаемые методом значения.
Интересный вопрос +1 –