PDA

Visualizza versione completa : [C] Mantenere il valore tra le funzioni


Manugal
10-04-2006, 15.25.11
Ciao.

Ho un problema con le mie funzioni che sto implementando. Allora ho una variabile cntOpenDatabases dichiarata come static che inizialmente vale -1. Chiamando la prima funzione, questa variabile si incrementa di 1 e quindi cntOpenDatabases=0 (e ogni volta che chiamo questa funzione la fa incrementare). Dopo aver chiamato una volta la prima funzione chiamo la seconda, che deve decrementare di 1 questa variabile, quindi cntOpenDatabases=-1. Il problema ora è che se adesso richiamo la prima funzione il valore di questa variabile (dopo l'incremento) non ritorna a 0 ma è 1 (perché ha mantenuto il valore della chiamata precedente). Io devo fare in modo che il valore sia mantenuto tra le varie funzioni che modifcano cntOpenDatabases. Riepilogando, chiamo la prima f() e cntOpenDatabases=0, chiamo la seconda e cntOpenDatabases=-1, richiamo la prima e cntOpenDatabases deve essere =0 di nuovo. Come posso fare? Grazie.

Semi.genius
10-04-2006, 15.29.01
non puoi far vedere uno straccio del codice? perché è difficile capire senza avere un prototipo del codice in vista

Manugal
10-04-2006, 15.38.01
Ti faccio un esempio (perché il codice è troppo lungo e non focalizza bene il problema):


static int cntOpenDatabases=-1;

int funz1(){
++cntOpenDatabases;
return cntOpenDatabases;
}

int funz2(){
--cntOpenDatabases;
return cntOpenDatabases;
}



Se tramite un main chiamo la funz1() ---> cntOpenDatabases=0 e poi la funz2() ---> cntOpenDatabases=-1. Ora (naturalmente non sono uscito dal programma) se richiamo la funz1() ---> cntOpenDatabases=1, mentre invece io voglio che cntOpenDatabases sia uguale a -1 (cioè uguale al valore che è stato modificato da funz2()).

Spero di essermi spiegato. :)

Semi.genius
10-04-2006, 15.49.44
una cosa...la static int cntOpenDatabases=-1; dove la dichiari? fuori dalle funzioni, sembrerebbe ma all'interno del main, no?

Manugal
10-04-2006, 15.50.57
la static int è dichiarata globale fuori da tutto.

Manugal
10-04-2006, 17.06.55
Ci sono riuscito grazie mille ;)