Gotcha (programmazione)

caratteristica di un programma o un linguaggio di programmazione

Nella programmazione, un gotcha è una caratteristica di un programma o un linguaggio di programmazione, che lavora in un modo che è corretto dal punto di vista formale – cioè rispetta la sintassi del linguaggio – ma che non è quello che ci si aspetta dal programma, nelle intenzioni del programmatore. Ciò induce all'errore perché tale comportamento è sia facile da riprodurre che completamente inaspettato.

Il termine è una storpiatura della pronuncia dell'espressione inglese I got you, che in questo contesto si potrebbe tradurre con "Ti ho beccato". In questo senso, una resa in italiano accettabile potrebbe essere "trabocchetto".

Gotcha in linguaggio C

modifica

Operatore di assegnamento

modifica

Ad esempio in un programma C, quando scriviamo l'istruzione:

if(a = b)
    printf("Hello World\n");

il programma stamperà a video la stringa "Hello World" solo se b è diverso da false, in quanto il programma assegna ad a il valore di b e poi valuta a. Infatti in C, come in molti altri linguaggi, l'operatore di assegnamento (=) è distinto da quello di confronto (==).

Probabilmente il programmatore intendeva scrivere:

if(a == b)
    printf("Hello World\n");

che invece valuta se il valore a è uguale a quello del valore b, e in caso positivo stampa la stringa "Hello World".

Questo è appunto il caso di un "gotcha".

Chiamata a funzione

modifica

Un altro esempio

/* File name: fortytwo.c */
#include <stdio.h>

foo() {
   printf("  42!\n");
}

int main() {
    printf("Qui sotto scriverò '42':\n");
    foo;
    printf("Penso di aver scritto '42', ma non ne sono sicuro...\n");
    return 0;
}

Il programma, dopo essere stato compilato ed eseguito, produrrà in output:

$ ./fortytwo
Qui sotto scriverò '42':
Penso di aver scritto '42', ma non ne sono sicuro...

Ciò che l'espressione foo; fa – in modo controintuitivo per chi non conosce a fondo il linguaggio – è quello di restituire l'indirizzo di memoria della funzione foo. Probabilmente il programmatore intendeva effettuare una chiamata a funzione:

    foo();

dove le parentesi indicano una chiamata a funzione senza argomenti.

Voci correlate

modifica

Collegamenti esterni

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy