История изменений
Исправление red75prim, (текущая версия) :
Например, что первое приходит на ум, кидать предупреждение всегда когда меняется структура кода. Выбросить RET из функции это как бы не мышь чихнула, такое должно явно сообщаться.
А если это библиотека и в документации к функции написано, что скажем вызов с n=0 - это UB, так что никогда не вызывайте функцию с n=0? Всё равно кидать предупреждение?
Дать программисту средство подавить предупреждение? Нет гарантий, что это подавленное предупреждение не станет актуальным после изменений в коде.
Каждый раз при использовании библиотеки выполнять анализ потоков исполнения, и выдавать предупреждение только если возможен вызов с n=0? Сильно замедлит компиляцию, да и ложные срабатывания будут, которые тоже захочется подавить и см. выше.
В реальных компиляторах используют последний вариант в сокращённом виде: небольшой статический анализ кода + всякие эвристики для сокращения ложных срабатываний.
Исправление red75prim, :
Например, что первое приходит на ум, кидать предупреждение всегда когда меняется структура кода. Выбросить RET из функции это как бы не мышь чихнула, такое должно явно сообщаться.
А если это библиотека и в документации к функции написано, что скажем вызов с n=0 - это UB, так что никогда не вызывайте функцию с n=0? Всё равно кидать предупреждение?
Дать программисту средство подавить предупреждение? Нет гарантий, что это подавленное предупреждение не станет актуальным после изменений в коде.
Каждый раз при использовании библиотеки выполнять анализ потоков исполнения, и выдавать предупреждение только если возможен вызов с n=0? Сильно замедлит компиляцию, да и ложные срабатывания будут, которые тоже захочется подавить и см. выше.
В реальных компиляторах используют последний вариант в сокращённом виде: статический анализ кода + всякие эвристики для сокращения ложных срабатываний.
Исправление red75prim, :
Например, что первое приходит на ум, кидать предупреждение всегда когда меняется структура кода. Выбросить RET из функции это как бы не мышь чихнула, такое должно явно сообщаться.
А если это библиотека и в документации к функции написано, что скажем вызов с n=0 - это UB, так что никогда не вызывайте функцию с n=0? Всё равно кидать предупреждение?
Дать программисту средство подавить предупреждение? Нет гарантий, что это подавленное предупреждение не станет актуальным после изменений в коде.
Каждый раз при использовании библиотеки выполнять анализ потоков исполнения, и выдавать предупреждение только если возможен вызов с n=0? Замедлит компиляцию, да и ложные срабатывания будут, которые тоже захочется подавить и см. выше.
В реальных компиляторах используют последний вариант в сокращённом виде: статический анализ кода + всякие эвристики для сокращения ложных срабатываний.
Исходная версия red75prim, :
Например, что первое приходит на ум, кидать предупреждение всегда когда меняется структура кода. Выбросить RET из функции это как бы не мышь чихнула, такое должно явно сообщаться.
А если это библиотека и в документации к функции написано, что скажем вызов с n=0 - это UB, так что никогда не вызывайте функцию с n=0? Всё равно кидать предупреждение?
Дать программисту средство подавить предупреждение? Нет гарантий, что это подавленное предупреждение не станет актуальным после изменений в коде.
Каждый раз при использовании библиотеки выполнять анализ потоков исполнения, и выдавать предупреждение только если возможен вызов с n=0? Замедлит компиляцию, да и ложные срабатывания будут, которые тоже захочется подавить и см. выше.