C语言 如何返回 main 而不是调用它的函数



我有一个调用anotherFunction()function()。在anotherFunction()内部,有一个if语句,当满意时返回main()而不是function()。你是怎么做到的?

你不能在"标准"C 中这样做。您可以使用setjmp和longjmp来实现它,但强烈建议不要这样做。

为什么不只从anotherFuntion()返回一个值并根据该值返回?像这样的东西

int anotherFunction()
{
    // ...
    if (some_condition)
        return 1; // return to main
    else
        return 0; // continue executing function()
}
void function()
{
    // ...
    int r = anotherFuntion();
    if (r)
        return;
    // ...
}

您可以返回_Bool或通过指针返回,如果该函数已用于返回其他内容

在 C 中你不能轻易做到这一点。最好的办法是从anotherFunction()返回状态代码,并在function()中适当地处理。

(C++您可以使用异常有效地实现您想要的)。

大多数语言都有启用这种流控制的例外。 C 没有,但它确实具有执行此操作的 setjmp/longjmp 库函数。

您可以使用 setjmp 和 longjmp 函数绕过 C 中的正常返回序列。

他们在维基百科上有一个例子:

#include <stdio.h>
#include <setjmp.h>
static jmp_buf buf;
void second(void) {
    printf("secondn");         // prints
    longjmp(buf,1);             // jumps back to where setjmp was called - making setjmp now return 1
}
void first(void) {
    second();
    printf("firstn");          // does not print
}
int main() {   
    if ( ! setjmp(buf) ) {
        first();                // when executed, setjmp returns 0
    } else {                    // when longjmp jumps back, setjmp returns 1
        printf("mainn");       // prints
    }
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新