Про строгость обнаружения ошибок
От: Shmj Ниоткуда  
Дата: 21.02.24 13:53
Оценка: :))
Вопрос такой. По умолчанию на моей системе компилятор не выдает ошибку, когда функция, которая должна возвращать bool — ничего не возвращает.

Как разобраться с опциями — хотелось бы такое отлавливать на этапе компиляции.
Re: Про строгость обнаружения ошибок
От: SaZ  
Дата: 21.02.24 14:55
Оценка: +3
Здравствуйте, Shmj, Вы писали:

S>Вопрос такой. По умолчанию на моей системе компилятор не выдает ошибку, когда функция, которая должна возвращать bool — ничего не возвращает.


S>Как разобраться с опциями — хотелось бы такое отлавливать на этапе компиляции.


https://rsdn.org/Info/Howtoask.xml

Если не доходит — напиши, какие поисковые запросы ты вводил в гугл?
Re: Про строгость обнаружения ошибок
От: CreatorCray  
Дата: 21.02.24 21:13
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Вопрос такой. По умолчанию на моей системе компилятор не выдает ошибку, когда функция, которая должна возвращать bool — ничего не возвращает.

А ты точно настоящий сварщик?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re: Про строгость обнаружения ошибок
От: Pzz Россия https://github.com/alexpevzner
Дата: 21.02.24 22:43
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Как разобраться с опциями — хотелось бы такое отлавливать на этапе компиляции.


gcc -W -Wall -Werror


Забыл, кстати, спросить: а какой у тебя компилятор?
Re[2]: Про строгость обнаружения ошибок
От: so5team https://stiffstream.com
Дата: 22.02.24 05:05
Оценка:
Здравствуйте, CreatorCray, Вы писали:

S>>Вопрос такой. По умолчанию на моей системе компилятор не выдает ошибку, когда функция, которая должна возвращать bool — ничего не возвращает.

CC>А ты точно настоящий сварщик?

Так он же недавно в job сам признался, что притворяется.
Re[3]: Про строгость обнаружения ошибок
От: wl. Россия  
Дата: 04.03.24 08:12
Оценка:
Здравствуйте, so5team, Вы писали:

S>Так он же недавно в job сам признался, что притворяется.


на самом деле вопрос хороший. Недавно забыл вернуть значение из функции, и забил на warnings компилятора, в итоге приложение начало падать, задолбался искать причину сбоя.
правда там не bool должен был возвращаться, а QString
Отредактировано 04.03.2024 8:22 wl. . Предыдущая версия . Еще …
Отредактировано 04.03.2024 8:21 wl. . Предыдущая версия .
Re[4]: Про строгость обнаружения ошибок
От: CreatorCray  
Дата: 04.03.24 08:15
Оценка: +1
Здравствуйте, wl., Вы писали:

wl.>забыл на warnings компилятора


Вот потому warnings as errors обязателен!
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[4]: Про строгость обнаружения ошибок
От: so5team https://stiffstream.com
Дата: 04.03.24 09:00
Оценка:
Здравствуйте, wl., Вы писали:

S>>Так он же недавно в job сам признался, что притворяется.


wl.>на самом деле вопрос хороший.


На самом деле вопрос сильно непростой. Т.к., емнип, один и тот же компилятор может выдавать или не выдавать подобные предупреждения в зависимости от сложности функции. Типа вот в таком виде:
int f() {
  do_something();
  // нет return-а.
}

выдает, а вот в таком уже нет:
int g() {
  if(some_condition) {
    do_something();
    // нет return-а.
  }
  else
    return -1;
}

Или другая история (которой, емнип, подвержен VC++, хотя может и не только он один):
enum class Status { Initial, Runnung, Stopped };
const char * to_str(Status status) {
  switch(status) {
  case Status::Initial: return "initial";
  case Status::Running: return "running";
  case Status::Stopped: return "stopped";
  }
}

Продвинутый компилятор может понять, что внутри switch все варианты обработаны и функция возвращает результат по всем веткам. Но менее продвинутые будут ругаться и требовать переписать в каком-то таком стиле:
enum class Status { Initial, Runnung, Stopped };
const char * to_str(Status status) {
  const char * result = "<unknown>";
  switch(status) {
  case Status::Initial: result = "initial"; break;
  case Status::Running: result = "running"; break;
  case Status::Stopped: result = "stopped"; break;
  }
  return result;
}
Re[5]: Про строгость обнаружения ошибок
От: CreatorCray  
Дата: 04.03.24 11:28
Оценка:
Здравствуйте, so5team, Вы писали:

S>выдает, а вот в таком уже нет:

Выбрасывай такой компилятор на помоечку

main.cpp
.\main.cpp(11): error #1011: missing return statement at end of non-void function "g"
  }
  ^


S>Продвинутый компилятор может понять

Это не "продвинутый", это промышленный компилятор.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[6]: Про строгость обнаружения ошибок
От: so5team https://stiffstream.com
Дата: 04.03.24 11:41
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

CC>Выбрасывай такой компилятор на помоечку


Не говорите что людям делать и они не будут говорить вам куда пойти

Если серьезно, то специфика части работы такая, что не мы определяем компилятор.

S>>Продвинутый компилятор может понять

CC>Это не "продвинутый", это промышленный компилятор.

С точки зрения здравого смысла там как раз все OK, т.к. используется не обычный enum, а enum class и нормальные компиляторы для switch по enum class предупреждают о том, что не все варианты обработаны.

Так что не удивлюсь, если со временем и GCC до Clang-а в этом плане дотянется.
Re[7]: Про строгость обнаружения ошибок
От: CreatorCray  
Дата: 04.03.24 20:44
Оценка:
Здравствуйте, so5team, Вы писали:

S>специфика части работы такая, что не мы определяем компилятор.

Могу только пособолезновать.
И ещё предложить делать тестовые прогоны нормальным компилятором или статическим анализатором.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re: Про строгость обнаружения ошибок
От: dmitry_npi Россия  
Дата: 05.03.24 05:22
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вопрос такой. По умолчанию на моей системе компилятор не выдает ошибку, когда функция, которая должна возвращать bool — ничего не возвращает.


Это что значит?

1. Функция bool f() должна иметь оператор return true, но его нет?
2. Нужно было написать функцию bool f(), но написали void f()?

Если 1, то это какой-то очень кривой компилятор.
Если 2, то, возможно, там какая-то шаблонная магия, и может, этот в кусок компилятор вообще не заглядывает. Нужен контекст.
Атмосферная музыка — www.aventuel.net
Re[8]: Про строгость обнаружения ошибок
От: so5team https://stiffstream.com
Дата: 05.03.24 06:32
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>И ещё предложить делать тестовые прогоны нормальным компилятором


В отличии от вас (у которого на все единственно правильное и непогрешимое мнение) я считаю, что компилятор, который заставляет писать вот так:
enum class Status { Initial, Runnung, Stopped };
const char * to_str(Status status) {
  const char * result = "<unknown>";
  switch(status) {
  case Status::Initial: result = "initial"; break;
  case Status::Running: result = "running"; break;
  case Status::Stopped: result = "stopped"; break;
  }
  return result;
}

нормальным в 2024-ом году называть сложно.
Re[9]: Про строгость обнаружения ошибок
От: CreatorCray  
Дата: 05.03.24 07:30
Оценка:
Здравствуйте, so5team, Вы писали:

S>В отличии от вас (у которого на все единственно правильное и непогрешимое мнение) я считаю


Ты хоть прочитал бы на что отвечаешь, чудо!
Пойди перечитай ветку, внимательно на этот раз.

S> что компилятор, который заставляет писать вот так нормальным в 2024-ом году называть сложно.

Такой компилятор я уже предложил снести на помоечку и взять вместо него полноценный, промышленный компилятор
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[10]: Про строгость обнаружения ошибок
От: so5team https://stiffstream.com
Дата: 05.03.24 07:43
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

CC>


Наконец-то посмотрели в зеркало? Удивительно.

CC>Пойди перечитай ветку, внимательно на этот раз.


А теперь повторю уже всерьез: не говорите людям что делать, им не придется говорить куда вам пойти.

S>> что компилятор, который заставляет писать вот так нормальным в 2024-ом году называть сложно.

CC>Такой компилятор я уже предложил снести на помоечку и взять вместо него полноценный, промышленный компилятор

Для кого-то таковыми являются GCC и MSVC++. И переходить на clang или еще на что-то дорогое и близкое сердцу тов.CreatorCray они не собираются.

Это данность, с которой приходится жить. И в этой данности остается писать код так, чтобы любой компилятор из "большой тройки" не ругался.

И нет, сочувствовать не нужно.
Re[11]: Про строгость обнаружения ошибок
От: CreatorCray  
Дата: 05.03.24 10:49
Оценка:
Здравствуйте, so5team, Вы писали:

https://www.youtube.com/watch?v=v3Xqvy1jqio
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[12]: Про строгость обнаружения ошибок
От: so5team https://stiffstream.com
Дата: 05.03.24 11:41
Оценка:
Здравствуйте, CreatorCray

Ну вы бы хоть название того самого "промышленного компилятора" озвучили бы. Может Intel oneAPI C++ compiler?
Re: Про строгость обнаружения ошибок
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 05.03.24 20:45
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Вопрос такой. По умолчанию на моей системе компилятор не выдает ошибку, когда функция, которая должна возвращать bool — ничего не возвращает.


Странно, любой нормальный компилятор даже на минималках варнингов выдаст сообщение о таком косяке. Видимо, у тебя там что-то специально подкручивал, чтобы было так.


S>Как разобраться с опциями — хотелось бы такое отлавливать на этапе компиляции.


Ну как, как — берёшь и разбираешься В зависимости от компилятора это может быть по-разному.
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.