В программировании , Гоча является действительным конструктом в системе, программе или язык программирования , который работает , как документированные , но является нелогичным и почти приглашают ошибки , потому что это так легко вызвать и неожиданная или необоснованную в его исходе. [1]
Пример
Классический подводный камень в C / C ++ - это конструкция
если ( a = b ) код ;
Он синтаксически действителен: он помещает значение b
в a
и затем выполняется, code
если a
оно не равно нулю. Иногда это даже преднамеренно. Однако чаще всего это опечатка: вероятно, программист имел в виду
if ( a == b ) код ;
который выполняется, code
если a
и b
равны. [1] Современные компиляторы обычно генерируют предупреждение при обнаружении первой конструкции (условная ветвь при назначении, а не сравнение), в зависимости от параметров компилятора (например, параметр -Wall для gcc). Чтобы избежать этой ошибки, рекомендуется [2] сохранять константы в левой части сравнения, например, 42 == x
а не x == 42
. Таким образом, использование =
вместо ==
вызовет ошибку компилятора (см. Условия yoda ). Однако многие виды ошибок не обнаруживаются компиляторами. [ необходима цитата ]
Смотрите также
Рекомендации
дальнейшее чтение
- Стивен С. Дьюхерст (2003). C ++ Gotchas (Как избежать общих проблем в кодировании и дизайне) . Эддисон-Уэсли. ISBN 0321125185.
Внешние ссылки
- C Ловушки и ловушки Эндрю Кениг
- C ++ Gotchas Руководство программиста по предотвращению и исправлению девяноста девяти наиболее распространенных, деструктивных и интересных ошибок проектирования и программирования на C ++, Стивен К. Дьюхерст