Salvataggio di una variabile in una procedura

di il
2 risposte

Salvataggio di una variabile in una procedura

Salve ragazzi! Ultimamente sto ordinando i miei programmini e procedurizzando qualunque cosa possa essere procedurizzata, e mi sono reso conto che in alcune procedure servono variabili che, anche nelle prossime chiamate (ad esempio una chiamata in un ciclo) richiedono una variabile con il valore modificato precedentemente. Ora, tecnicamente, questo non e' un problema se si crea una variabile globale o nel main e la si passa nella chiamata, ma questo inquina visibilmente il programma, perche' molte sono variabili che fuori dalla procedura stessa non servono a niente.
Quindi, mi chiedevo se c'e' un modo per creare una variabile in una procedura e memorizzare il suo risultato, in modo che la variabile una volta modificata possa essere richiamata nella stessa procedura senza l'appoggio di una variabile esterna.
Ho pensato a memorizzarla in dei file, ma lo trovo molto ingombrante.
Esempio:
Una procedura deve controllare che i millisecondi passati da una determinata azione siano 2000 (facciamo finta che sia per controllare lo sparo di un proiettile).
Nella procedura ci sara' scritto qualcosa del genere:

milliseconds = tempoAttuale - tempoSparato;
if (milliseconds >= 1000)
{
if (tastoSpremuto)
{
spara;
tempoSparato = tempoAttuale;
}
}
La variabile tempoAttuale e tempoSparato devono essere memorizzate, perche' la procedura non e' pensata per "bloccarsi" finche' i millisecondi sono maggiori di 1000 e il tasto e' premuto, ma e' pensata per venir "letta" in un ciclo come se fosse un normale if. Non so se mi sono spiegato bene...

2 Risposte

  • Re: Salvataggio di una variabile in una procedura

    Non so se ho capito ma forse ti serve una variabile static

    Ma se fai un esempio pratico ci capiamo meglio
  • Re: Salvataggio di una variabile in una procedura

    Provo a farti un'esempio piu' concreto:
    Dentro il ciclo principale di una finestra (quindi utilizzando grafica, ma questo non e' importante) voglio incrementare una variabile ogni volta che la differenza tra l'ultima volta che ho incrementato la variabile e il momento attuale e' uguale o maggiore di 500 millisecondi (in poche parole ogni mezzo secondo incrementa una variabile), ma nel ciclo non c'e' solo questo (altrimenti basterebbe uno sleep(500);), ci sono anche altre attivita' che non possono essere bloccate, come nel caso di uno sleep. Inoltre, questa parte del codice deve essere procedurizzata. Facendo la procedura, uscirebbe
    
    void contaVariabile(clock_t tempoAttuale, double& tempoIncremento, int& var)
    {
        double millisec;
        millisec = tempoAttuale - tempoIncremento; //tempoIncremento = il tempo dall'ultimo incremento.
        if(millisec >= 500)
        {
            tempoIncremento = tempoAttuale;
            var++;
        }
    }
    
    Questa e' l'ipotetica procedura. Io devo trasformare la procedura in modo da non avere quelle ingombranti variabili tempoAttuale e tempoIncremento, avendo soltanto come variabile di output va variabile (var) incrementata.
Devi accedere o registrarti per scrivere nel forum
2 risposte