Dò un suggerimento generale, che in questo caso non si applica, o meglio potrebbe, ma in realtà no![]()
---
Il suggerimento è questo: mai usare OR, se non con grandissima attenzione alle ottimizzazioni del compilatore, nella fattispecie "valutazione completa delle espressioni booleane", e l'uso di funzioni o procedure nelle condizioni.
Sostanzialmente se nella condizione OR c'è un "qualcosa" (procedura, funzione, ma anche operatore nel caso di C++) che altera "qualcos'altro" (es. variabili globali) ed il compilatore NON fa la valutazione completa, si possono avere effetti collaterali negativi.
Questi capitano, in generale, quando si compila lo stesso progetto in ambienti diversi (=ottimizzazioni diverse)
supponiamo qualcosa del genere (i<3) || ( cerca(25)==1 )
se la funzione "cerca" fa un'alterazione che io mi aspetto venga sempre eseguita (aggiornare puntatore, fare query etc), potrebbe non essere in realtà mai eseguita da un compilatore ottimizzante quando si accorge che la prima parte dell'espressione è vera.
In pratica fa "i<3"? sì? -> non serve valutare la parte rimanente, in quanto l'espressione OR è già computabile (vera in questo caso)
---
In generale, quindi, suggerisco di NON usare espressioni OR contenenti procedure o funzioni, a meno di non essere assolutamente sicuri che non abbiano side effects, o di aver forzato a "mano" la valutazione completa.
Non usandole mai -> si risolve il problema alla radice.
Non un gran suggerimento... però l'esperienza consiglia di tenerlo presente
EDIT: per inciso il frammento di codice è,ovviamente, adatto solo per fini didattici, non assomiglia a un "vero" programma, però immagino che si tratti di esercizietti basici