Много месяцев назад мне пришлось исправить код, который вызвал некоторые проблемы. Код выглядел в основном так:Почему эта очевидная бесконечная рекурсия не дает предупреждения о компиляторе?
int badFun() { return badFun(); }
Это, очевидно, вызвало переполнение стека даже на языке высокого уровня, я работал с (4Test в SilkTest). Нет никакого способа, чтобы этот код можно было считать полезным. Первыми признаками проблем были предупреждения, увиденные после завершения скрипта, но не ошибки компиляции или предупреждения. Любопытно, что я пробовал писать программы на C++, C# и Python с одинаковой структурой, и все они были скомпилированы/интерпретированы без синтаксических ошибок или предупреждений, даже несмотря на ошибки во время выполнения во всех случаях. В любом из этих случаев я даже не видел никаких предупреждений. Почему по умолчанию эта проблема не рассматривается как возможная проблема?
EDIT: Я попытался записать эквивалент этой функции на всех трех языках, поэтому я добавил теги функций. Меня больше интересуют общие причины, по которым код, подобный этому, проходит без предупреждений. Пожалуйста, попробуйте, если необходимо.
Ваш вопрос о C#, C++ * или * Python? Пример кода выглядит так же, как C#. – BoltClock
Это не работа компилятора, чтобы вы не делали что-то глупое. В большинстве языков для некоторого внешнего события возможно вывести конструкцию вроде этого. –
В MSVC (C++) он выдаст вам предупреждение, если вы вызовете функцию: 'warning C4717: 'badFun': рекурсивный на всех путях управления, функция вызовет переполнение стека во время выполнения' – Mysticial