从C中的另一个函数调用main函数
我有一个main函数,它在初始化期间运行一些函数,然后运行一个等待来自UART的命令的while循环。
当我看到一个特定的命令(让我们说重置)时,我调用一个返回值的函数。 我想做以下事情:
- 保存返回的值
- 使用返回的值再次启动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}循环。 你可以在一个内在循环或其他任何东西中完成你的所有操作,并且有条款,如果你得到你想要的新值,你可以掉到底部并循环回来,有效地重新运行主体的新状态。