У меня есть старое C Linux-приложение, которое мне нужно повторно использовать. Это приложение использует много глобальных переменных. Я хочу повторно использовать основной метод этого приложения и вызывать его в цикле. Я обнаружил, что когда я вызываю основной метод (переименованный в 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, который бы сбрасывал глобальные переменные. Глобальные переменные должны быть кэшированы и использованы повторно.