У меня есть функция, которая показывает какое-то сообщение, правильно завершает программу и, наконец, вызывает exit (-1) ;. Вот пример использования: Data SomeFunction () {Data data; if (some_condition) {// ...

c++
2
Valeriy Chistyakov 2 Июл 2021 в 23:01

6 ответов

Лучший ответ

ShowErrorAndExit должен быть помечен как [[noreturn]]. Это уберет предупреждение.

Примере:

[[noreturn]] void ShowErrorAndExit(std::string message) {...}
3
HolyBlackCat 2 Июл 2021 в 20:09

Вы можете использовать std::optional, он позволяет вам возвращать ваш тип Data или вообще ничего, a.k.a. std::nullopt. Посмотрите здесь: https://en.cppreference.com/w/cpp/utility/optional

-1
goodle06 2 Июл 2021 в 20:11

Вы можете проигнорировать предупреждение или, если ваш компилятор позволяет это сделать, отключить его. Другой вариант - поставить throw в конце функции с комментарием, указывающим, что она никогда не должна выполняться.

-1
David Schwartz 2 Июл 2021 в 20:05

Вы можете обмануть компилятор, думая, что return достигается всегда:

Data SomeFunction()
{
  Data data;
  if (! some_condition)
      ShowErrorAndExit("Some message");

  // fill the data

  return data;
}
1
CiaPan 2 Июл 2021 в 20:28

Вы можете (и должны ) объявить свою функцию ShowErrorAndExit с атрибутом [[noreturn]] (ссылка). Это позволит компилятору (если он в разумных пределах) понять, что ваша функция никогда не достигает контрольной точки, для которой она выдает предупреждение.

Что-то вроде этого:

[[ noreturn ]] void ShowErrorAndExit(const char* message); 
1
Adrian Mole 2 Июл 2021 в 20:10

Инвертируем логику:

Data SomeFunction() {
if (!some_condition)
    ShowErrorAndExit("Some message");
Data data;
// filling in the data
return data;
}
2
Pete Becker 2 Июл 2021 в 20:10