Борьба с неопределённым поведением в языках программирования возложена на программиста, использующего эти языки и библиотеки. ru.wikipedia.org
Несколько способов справиться с неопределённым поведением:
- Использовать статический анализ кода. bhv.ru ru.wikipedia.org Некоторые проблемы проявляются в предупреждениях компилятора. ru.wikipedia.org Статические анализаторы, такие как Cppcheck, Clang Static Analyzer, PVS-Studio, способны найти многие проблемы и привлечь внимание к сомнительному коду. bhv.ru
- Собирать код под разные платформы с разными уровнями оптимизаций и сравнивать его поведение. bhv.ru Код без ошибок должен быть переносимым и вести себя одинаково. bhv.ru
- Дополнять программу проверками на значения, которые могут вызвать неопределённое поведение. ru.wikipedia.org
- Некоторые языки программирования исключают неопределённое поведение, запрещая делать оптимизации, которые могли бы к нему привести, и устанавливая дополнительные проверки выхода за границы. ru.wikipedia.org
- Многие оптимизирующие компиляторы позволяют либо отключить подобные оптимизации, либо установить на опасные участки дополнительные проверки. ru.wikipedia.org
Дать абсолютную гарантию отсутствия неопределённого поведения может только коллегия экспертов, которая сверяет каждую строчку кода с буквой стандарта. bhv.ru pvs-studio.ru