¿Hay alguna manera de restablecer las variables declaradas como estáticas dentro de una función? El objetivo es asegurarse de que la función no se llame con los valores persistentes de una llamada no relacionada. Por ejemplo, tengo una función operando en columnas de una matriz.Cómo restablecer variables estáticas dentro de una función
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 función se llama n veces, una para cada columna. ¿Es esta una forma adecuada de "restablecer" la variable estática? ¿Hay otras formas generales a prueba de tontos para restablecer las variables estáticas? Por ejemplo, quiero asegurarme de que si la llamada se realiza con una nueva matriz con dimensiones posiblemente diferentes, entonces el vector v se redimensiona y se pone a cero, etc. Parece que la manera más fácil es llamar a la función con un puntero 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
}
No utilice variables estáticas/globales. En su lugar, pase la función un puntero a un número entero que la persona que llama mantiene para preservar el estado de las llamadas. –
Acabo de tener un problema similar cuando tuve que restablecer mis variables estáticas pero solo en mi código de prueba. Mi truco fue establecer punteros de entrada en NULL, verificar eso en el func y luego reiniciar la variable según sea apropiado, efectivamente usando un valor NULL en un parámetro existente como indicador. un poco apestoso pero funciona. – bph
una clase con variables miembro estáticas sería su solución ideal quizás, pero con C (sin OOP) quizás una estructura estática sea probablemente la solución elegante más cercana. – bph