Gotcha
Această intrare sau secțiune despre limbaje de programare nu menționează sursele necesare sau cei prezenți sunt insuficienți . |
În programare, un gotcha este o caracteristică a unui program sau a unui limbaj de programare , care funcționează într-un mod care este formal corect - adică respectă sintaxa limbajului - dar care nu este ceea ce se așteaptă de la program, în intențiile programatorului . Acest lucru este înșelător, deoarece un astfel de comportament este ușor de reprodus și complet neașteptat.
Termenul este o denaturare a pronunției expresiei englezești I got you , care în acest context ar putea fi tradusă ca „I caught you”. În acest sens, o interpretare acceptabilă în limba italiană ar putea fi o „capcană”.
Gotcha în limbajul C.
Operator de misiune
De exemplu, într-un program C , când scriem instrucțiunea:
dacă ( a = b )
printf ( "Hello World \ n " );
Programul se va imprima pe ecran șirul de caractere „Hello World“ , numai în cazul în care b este diferit de fals, din moment ce atribuie programului la valoarea b, atunci moneda. De fapt, în C, ca în multe alte limbi, operatorul de atribuire ( = ) este distinct de operatorul de comparație ( == ).
Probabil că programatorul intenționa să scrie:
if ( a == b )
printf ( "Hello World \ n " );
care în schimb evaluează dacă valoarea a este egală cu cea a valorii b și, dacă da, imprimă șirul „Hello World”.
Acesta este exact cazul cu un „gotcha”.
Apel la funcție
Alt exemplu
/ * Numele fișierului: fiftytwo.c * /
#include <stdio.h>
foo () {
printf ( "42! \ n " );
}
int main () {
printf ( „Voi scrie '42' mai jos: \ n " );
foo ;
printf ( „Cred că am scris„ 42 ”, dar nu sunt sigur ... \ n ” );
retur 0 ;
}
Programul, după ce a fost compilat și executat, va produce ca ieșire:
$ ./fortytwo
Mai jos voi scrie „42”:
Cred că am scris „42”, dar nu sunt sigur ...
Ce expresie foo;
face - contraintuitiv pentru cei care nu sunt familiarizați cu limba - este de a returna adresa de memorie a funcției foo
. Programatorul intenționa probabil să efectueze un apel funcțional :
foo ();
unde parantezele indică un apel de funcție fără argumente.
Elemente conexe
linkuri externe
- ( RO ) C Language Gotchas , la greenend.org.uk .