Gotcha (programming)
{{short description|Code that is valid but counter-intuitive}}
In programming, a gotcha is a valid construct in a system, program or programming language that works as documented but is counter-intuitive and almost invites mistakes because it is both easy to invoke and unexpected or unreasonable in its outcome.
Example
The classic gotcha in C/C++ is the construct
if (a = b) code;
It is syntactically valid: it puts the value of b
into a
and then executes code
if a
is non-zero. Sometimes this is even intended. However most commonly it is a typo: the programmer probably meant
if (a == b) code;
which executes code
if a
and b
are equal.[http://catb.org/jargon/html/G/gotcha.html Gotcha definition at The Jargon File] Modern compilers will usually generate a warning when encountering the former construct (conditional branch on assignment, not comparison), depending on compiler options (e.g., the -Wall
option for gcc). To avoid this gotcha, some programming languages such include specific syntax for when this is desired behavior, such as Python's "walrus" operator (:=
). In languages where this specific syntax does not exist, there is a recommendation[https://www.securecoding.cert.org/confluence/display/c/VOID+EXP21-C.+Place+constants+on+the+left+of+equality+comparisons "VOID EXP21-C. Place constants on the left of equality comparisons"] to keep the constants in the left side of the comparison, e.g. 42 == x
rather than x == 42
. This way, using =
instead of ==
will cause a compiler error (see Yoda conditions). Many kinds of gotchas are not detected by compilers, however.{{cn|date=September 2018}}
See also
References
{{Reflist}}
Further reading
- {{cite book|author=Stephen C. Dewhurst|title=C++ Gotchas (Avoiding Common Problems in Coding and Design)|publisher=Addison-Wesley|date=2003|isbn=0321125185}}
External links
{{wiktionary|gotcha}}
- [http://www.literateprogramming.com/ctraps.pdf C Traps and Pitfalls] by Andrew Koenig
- [https://web.archive.org/web/20160817045649/http://buhoz.net/public/books/lenguajes/c++/tecnicas/C++.Gotchas-.Avoiding.Common.Problems.in.Coding.and.Design.pdf C++ Gotchas] A programmer's guide to avoiding and correcting ninety-nine of the most common, destructive, and interesting C++ design and programming errors, by Stephen C. Dewhurst
Category:Computer programming folklore