Esiste un modo per ripristinare le variabili dichiarate come statiche all'interno di una funzione? L'obiettivo è assicurarsi che la funzione non venga chiamata con valori persistenti da una chiamata non correlata. Ad esempio, ho una funzione che opera su colonne di una matrice.Come resettare le variabili statiche all'interno di una funzione
int foo(matrix *A, int colnum, int rownum){
static int whichColumn;
static int *v; //vector of length A->nrows
if (column != whichColumn){
memset(v,0,size);
whichColumn = which;
}
//do other things
}
La funzione è chiamata n volte, una volta per ogni colonna. È un modo corretto di "reimpostare" la variabile statica? Esistono altri metodi generali per reimpostare le variabili statiche? Per esempio, voglio assicurarmi che se la chiamata è fatta con una nuova matrice con dimensioni possibilmente diverse, allora il vettore v viene ridimensionato e azzerato, ecc. Sembra che il modo più semplice sia quello di chiamare la funzione con un puntatore NULL:
int foo(matrix *A, int colnum, int rownum){
static int whichColumn;
static int *v; //vector of length A->nrows
if (A == NULL){
FREE(v);
whichColumn = 0;
}
//do other things
}
Non utilizzare variabili statiche/globali. Passa invece alla funzione un puntatore a un numero intero che il chiamante mantiene per preservare lo stato tra le chiamate. –
Ho appena avuto un problema simile a quello che ho dovuto ripristinare le mie variabili statiche ma solo nel mio codice di test. Il mio hack è stato quello di impostare i puntatori di input su NULL, verificare che nel func reimpostasse la variabile in modo appropriato, usando effettivamente un valore NULL in un parametro esistente come flag. un po 'puzzolente ma funziona. – bph
una classe con variabili membro statiche sarebbe la soluzione ideale forse, ma con C (no OOP) forse una struttura statica è probabilmente la soluzione elegante più vicina. – bph