Newsgroup: it.comp.lang.c++
Titolo: Mi stà capitando una cosa llucinante. Spero sia solo uno scherzo dell'editor !!!

Salve a tutti i partecipanti al NG,
se qualcuno si ricorda di me si ricorderà anche il mio livello di competenza
del C++.
Ho per il NG una domanda curiosa che, come preannuncia il subject, si spera
sia uno scherzo del mio computer o del compilatore.
if((int)(--nacked)<0) nacked=0;
è una stupida istruzione che è appena C, neanche C++, ma visto che alle
discussioni partecipa spesso gente che, oltrechè conoscerlo bene, lavora col
C++, e quindi anche con i compilatori per C++, mi è sembrato questo il posto
più adatto dove inserire il messaggio.
Spero che qualcuno di voi adoperi il compilatore C++ della Borland (quello
con interfaccia grafica), e che quindi possa venirmi in aiuto, dandomi
magari anche solo un suggerimento o qualsiasi spiegazione semi-logica.
Il debugger fornisce un comando, Inspect, che consente di "leggere" (almeno
credo) il contenuto di una variabile durante la compilazione passo-passo del
codice.
Normalmente, posizionando semplicemente il puntatore del mouse sulla
variabile, ne appare il valore
Ho fatto questo per monitorare nacked prima dell'esecuzione dell'if.
Stranamente,ogni volta che puntavo col mouse --nacked, questo si
decrementava di una unità, coem se puntare col mouse la variabile
significasse effettuare una operazione sulla variabile.
Mi sembra molto strano, perchè per quello che ho capito io finora del
significato dell'operatore prefisso --, prima si decrementa nacked e poi si
valuta la condizione che lo coinvolge, ma mai mi sarei aspettato che la
semplice lettera con l'interfaccia grafica della variabile producesse questo
effetto collaterale.
Forse mi sto sbagliando, ma l'operazione che effettua il debugger non è
slegata dall'azione vera e propria sulla variabile?
Il mio timore non è tanto quello che la variabile si decrementa cosi, cosa
che a me è sembrata misteriosa, ma che sicuramente non lo è per voi, quanto
che usando
if((int)(--nacked)<0) nacked=0;
la variabile si decrementi infinite volte, e non di una sola unità.
So che parecchi di voi si stupiranno per la banalità della domanda, ma una
cosa simile non mi era mai capitata prima d'ora e, anche se sono ad un
livello pietoso, non sono un novello della programmazione, quindi la cosa mi
incuriosisce molto.
Infine, se cambiassi:
if((int)(--nacked)<0) nacked=0;
in:
if((int)(nacked--)<0) nacked=0;
non otterrei l'effetto che io voglio, vero? Cioè prima viene valutata la
condizione e poi nacked viene decrementata decrementa, no?
Grazie sentitamente a chiunque si mostrerà pio nei miei confronti.
Capitemi, sto lavorando ad una tesi e questo contesto è stato il mio primo
banco di prova col C++...
Sebastiano

la variabile si decrementi infinite volte, e non di una sola unità.
Da me non accade.
--
Andrea Laforgia (ICQ 87230455)
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

Grazie per avermi prontamente risposto.
So che è fuori dalla logica ma dopo aver postato ho riprovato; quello che
dicevo si è ripetuto e, per di più, se effettuo l'F8 senza puntare prima il
muose sulla variabile questa non si decrementa.
Sembra quasi che l'unico modo di decrementarla ora è ... il mouse ?!?!?!
Ma che mi stà succedendo.
Cosa posso sospettare?
Sebastiano

Cosa posso sospettare?
Che ci sia un errore nel programma >:).
Ora sono curioso di vedere l'intero codice.


 Ora sono curioso di vedere l'intero codice.
E' una parola! Sono oltre 4000 linee...
ma posso allegare qualcosa di veramente banale che da lo stesso
comportamento...
ma solo con l'operatore prefisso --. Ho provato col postifisso e col ++
(prefisso e postfisso) e niente di tutto questo.
ggiungo anche che il mio compilatore non segnaņa la keyword std come
standard... deve essergli capitato qualcosa di serio.
Allegato
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
main(){
int a=5;
if ((--a)==3) cout<<"tre"<<endl;
else
   if((++a)==5) cout<<"5"<<endl;
if((--(--a))==3) cout<<"3"<<endl;
if((a++)==4) cout<<"diventato 4"<<endl;
else
   cout<<"E' rimasto 3 durante la condizione"<<endl;
if((a--)==3) cout<<"diventato 3"<<endl;
else
   cout<<a<<" dopo la condizione"<<endl;
   return 0;
   }

 condizione e poi nacked viene decrementata decrementa, no?
Esatto!
Davide

 significasse effettuare una operazione sulla variabile.
Io non uso il borland ma incredibilmente oggi e' capitato anche ad
un mio collega con il VC++!!
A questo punto penso che sia un' issue in comune a questi IDE
supertecnologici ! :))
(Per la precisione... Lui valutava l' espressione con un a++ e
gli si incrementava lo stesso al passare del mouse...)
Sara' che avete tutti e due lo stesso virus :)))

Grazie tantissimo, Davide.
Questo vuol dire che ieri non avevo bevuto poi molto :-)
Ok. Starò attento a non passarci sopra il puntatore.
Riguardo il discorso che non si decrementava la variabile se non "usando il
mouse" mi ricredo.. era andato il Win 98 o qualcosa di simile, perchè poi
sono successe anche altre stranezze.
Anche io uso la stessa versione che usi tu.

Questo vuol dire che ieri non avevo bevuto poi molto :-)
Nell' ultimo post sembravi davvero disperato. Credo di avere ancora in
casa un pò della polverina magica di Pollon, ne vuoi un pò?
Il Ghenio
-----
E'più oscuro del crepuscolo, é più rosso del sangue,
in nome della pace e della giustizia faccio appello a
tutti i poteri più remoti dell'oscurità, perché mi
aiutino a distruggere i miei nemici e tutti coloro
che saranno tanto sciocchi da ostacolarmi. FULMINE ROSSO!!
(Slayers)
-----