【发布时间】:2010-09-13 22:22:50
【问题描述】:
我有一个需要重用的遗留 C Linux 应用程序。这个应用程序使用了很多全局变量。我想重用这个应用程序的主要方法并在循环中调用它。我发现当我在循环中调用 main 方法(重命名为 callableMain)时,应用程序的行为并不一致,因为上一次迭代中设置的全局变量的值会影响新迭代中的程序流程。
我想做的是在执行新迭代之前将所有全局变量重置为默认值。
比如原来的程序是这样的
OriginalMain.C
#include <stdio.h>
int global = 3; /* This is the global variable. */
void doSomething(){
global++; /* Reference to global variable in a function. */
}
// i want to rename this main method to callableMain() and
// invoke it in a loop
int main(void){
if(global==3) {
printf(" All Is Well \n");
doSomething() ;
}
else{
printf(" Noooo\n");
doNothing() ;
}
return 0;
}
我想把这个程序改成如下:
我将上面的文件改名为 main() 为 callableMain()
而我新的主要方法如下:
int main(){
for(int i=0;i<20;i++){
callableMain();
// this is where I need to reset the value of global vaiables
// otherwise the execution flow changes
}
}
这是否可以在调用 main() 之前将所有全局变量重置为值?
简短的回答是没有可以重置全局变量的神奇 api 调用。全局变量必须被缓存和重用。
【问题讨论】:
-
没有自动执行此操作的方法。考虑使用自动代码扫描来检测所有全局变量。此外,函数级静态也有助于全局状态。还有 RTL 的状态(打开的句柄等)。
-
从下面的所有回复来看,你是对的,我需要自动代码扫描来检测所有全局变量。您能否推荐任何可以检测所有全局变量和函数级静态变量的工具(基于 Linux)。
-
如果你想让一切都恢复到原来的状态,那么简单地运行可执行文件 20 次有什么问题?
-
梦想:性能,通常。
标签: c global-variables