У меня есть функция, которая возвращает ноль в случае успеха, или номер строки, где была обнаружена ошибка:C++ Внешне видимый Const
int func() {
// stuff
if (something is wrong) {
return __LINE__;
}
// more stuff
if (something else is wrong) {
return __LINE__;
}
// all good
return 0;
}
Реальные абоненты только проверить, является ли возвращаемое значение равно нулю или нет, часто, как это :
int ret = func();
if (ret != 0) {
return ret;
}
Однако, во время тестов я хотел бы проверить фактическое возвращаемое значение, чтобы убедиться, что определенный сбой условие было вызвано:
int ret = func();
EXPECT_EQ(42, ret);
Это создает проблему, так как при редактировании исходного файла func() строки возвращаемых операторов и, следовательно, возвращаемые значения также изменяются. Я хотел бы, чтобы номера строк были доступны для вызывающих абонентов func().
можно «экспортировать» номера строк, как это:
// header
extern const int line_number;
// source
const int line_number = __LINE__;
К сожалению, это работает только для номеров строк за пределами функции. Я хотел бы что-то вроде этого:
if (something is wrong) {
const int line_number = __LINE__; return __LINE__;
// or some other const thing
}
, который может быть прочитан из другой единицы перевода (файла).
Я попытался static const int line = __LINE__
, но имеет два недостатка:
- это не определение
line_number
объявлена в заголовке. - не может быть установлен до тех пор, пока выполнение не пройдет над ним.
C не C++ не является C! Не добавляйте теги для несвязанных языков. – Olaf
Если вам нужны коды возврата, возвращение значения «enum» будет возможным решением вместо номеров строк. – crashmstr
Почему бы не перечислить типы сбоев и не вернуть значение «enum» ошибки. Это отделяет отчет об ошибках от конфигурации файла. – NathanOliver