Нет.Программист несет ответственность за работу с плохо определенным поведением.
Сводный список документированных случаев UB только на C составляет 15 страниц.Недокументированные случаи еще более многочисленны, то есть совершают действия, выходящие за рамки того, что даже упоминается в стандарте.И давайте даже не будем упоминать C ++, где список плохо определенного поведения, вероятно, мог бы распространяться как отдельная, толстая публикация.
И тогда каждый отдельный случай UB дико отличается, многие из них появляются только при запускевремя, и результат может быть любым.Компилятор может только так сильно помочь, это не его работа - указывать на потенциальные ошибки во время выполнения.И затем компилятор VS C едва ли следует стандарту.
Отладочные сборки на самом деле могут быть хуже для обнаружения UB, чем релизные сборки.Такие инструменты, как VS, имеют тенденцию обнулять всю память в отладочной сборке - даже локальную память, делая ошибки незаметными.А при отсутствии / низком уровне оптимизации в режиме отладки некоторые ошибки никогда не проявятся.
Чтобы отсеять неопределенное поведение, вы можете использовать внешние инструменты статического / динамического анализа и стандарты кодирования, такие как MISRA или CERT.Но в конце концов это всегда сводится к знанию языка.Обзоры кода, в которых некоторые закаленные ветераны C или C ++ получают право голоса, очень ценны для раннего обнаружения ошибок.