【发布时间】:2011-03-30 03:38:34
【问题描述】:
有没有办法重置函数中声明为静态的变量?目标是确保不会使用来自不相关调用的延迟值调用该函数。例如,我有一个对矩阵列进行操作的函数。
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
}
函数被调用 n 次,每列调用一次。这是“重新设置”静态变量的正确方法吗?是否有其他通用的重置静态变量的万无一失的方法?例如,我想确保如果调用是使用可能具有不同维度的新矩阵进行的,则向量 v 会被调整大小并归零等。似乎最简单的方法可能是使用 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
}
【问题讨论】:
-
不要使用静态/全局变量。而是向函数传递一个指向整数的指针,调用者维护该整数以在调用之间保持状态。
-
我刚刚遇到了类似的问题,我不得不重置我的静态变量,但只能在我的测试代码中。我的技巧是将输入指针设置为 NULL,在 func 中检查它,然后根据需要重置变量 - 有效地使用现有参数中的 NULL 值作为标志。有点臭,但很管用。
-
具有静态成员变量的类可能是您理想的解决方案,但对于 C(无 OOP),静态结构可能是最接近的优雅解决方案。
-
抱歉,更仔细地重新阅读您的初始帖子 - 我已经有效地提出了完全相同的解决方案,快速而肮脏 - 想不出更好的方法可以快速实施跨度>
标签: c static initialization reset