从C中的另一个函数调用main函数

我有一个main函数,它在初始化期间运行一些函数,然后运行一个等待来自UART的命令的while循环。

当我看到一个特定的命令(让我们说重置)时,我调用一个返回值的函数。 我想做以下事情:

  1. 保存返回的值
  2. 使用返回的值再次启动main函数。 在main中的函数初始化期间需要返回值。

我是C的新手,我无法找出一种方法来保存main中的变量值。

我理解的方式,你基本上有以下设置:

int main(int argc, char *argv[]) { int value = something_from_last_reset; perform_initialization(value); while(1) { int next_command = wait_for_command(); if(next_command == RESET_COMMAND) { value = get_value(); // somehow restart main() with this new value } } return 0; } 

这是您可以采取的一种方法:

 // global int value = some_initial_value; void event_loop() { while(1) { int next_command = wait_for_command(); if(next_command == RESET_COMMAND) { value = get_value(); return; // break out of the function call } } } int main(int argc, char *argv[]) { while(1) { perform_initialization(value); event_loop(); } return 0; } 

这实际上允许您从事件循环中“转义”并重新执行初始化。

将你的main包装成无限循环。

 int main(void) { int init_val = 0; while (1) { // your code ... init_val = some_function(); } } 

理论上这是可能的,但它有点打破范式,重复调用函数而不让它完成并返回将很快填满你的调用堆栈,除非你采取措施在编译器的后面展开它。

更常见的解决方案是将main()函数编写为一个巨大的无限{1}循环。 你可以在一个内在循环或其他任何东西中完成你的所有操作,并且有条款,如果你得到你想要的新值,你可以掉到底部并循环回来,有效地重新运行主体的新状态。