Skip to content

Incremento, Logica e Condizionali

Gli operatori ++ (somma 1) e -- (sottrai 1) lavorano modificando la variabile su cui sono applicati. Tuttavia, il modo in cui restituiscono il valore dipende da dove li posizioni:

  • Prefisso (++i): Prima incrementa il valore in memoria, e poi restituisce il nuovo valore calcolato.
  • Postfisso (i++): Salva il vecchio valore temporaneamente, incrementa la memoria in background (come side-effect), e restituisce il vecchio valore salvato.
int i = 5;
int a = ++i; // i diventa 6, a vale 6
int j = 5;
int b = j++; // j diventa 6, ma b vale 5!

L’AND logico (&&) e l’OR logico (||) servono a combinare condizioni. A differenza di quasi tutti gli altri operatori in C, l’ordine di valutazione di && e || è rigorosamente da sinistra a destra. Esiste sempre un sequence point dopo la valutazione dell’operando sinistro.

Inoltre, introducono una tecnica chiamata Short-Circuiting (Corto-Circuito): se il C può dedurre il risultato finale valutando solo la prima parte dell’espressione, la seconda parte non viene mai eseguita.

// Se ptr è NULL (cioè 0), la prima condizione è Falsa.
// Poiché è un AND (&&), tutta l'espressione sarà Falsa a prescindere dal resto.
// Il C ignora la seconda parte, prevenendo un crash (dereferenziare un puntatore nullo).
if (ptr != NULL && *ptr == 10) { ... }

È l’unico operatore in C che prende tre operandi (? :). Funziona come un if-else compatto che restituisce un valore.

// Sintassi: condizione ? espressione_se_vero : espressione_se_falso;
int max = (a > b) ? a : b;

Sperimenta lo Short-Circuiting. Nel codice sottostante, la seconda funzione non dovrebbe mai essere chiamata, a patto di sistemare correttamente l’espressione logica nel blocco if. Modifica il codice per far stampare solo “Controllo Primo” (e non far mai scattare “Controllo Secondo”), assicurandoti che l’intero if valuti come vero solo se appropriato, o semplicemente sfrutta la logica di short-circuit ||.