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

时间:2014-08-08 23:50:23

标签: c function call main

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

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

  1. 保存返回的值
  2. 使用返回的值再次启动main函数。在main中的函数初始化期间需要返回值。
  3. 我是C的新手,我无法找出一种在main中保存变量值的方法。

3 个答案:

答案 0 :(得分:5)

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

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;
}

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

答案 1 :(得分:2)

只需将main打包到无限循环中。

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

答案 2 :(得分:2)

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

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