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

时间:2014-12-05 16:50:23

标签: c function setjmp

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

4 个答案:

答案 0 :(得分:5)

你不能在“标准”C中做到这一点。你可以用setjmplongjmp来实现它,但强烈建议不要这样做。

为什么不从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或通过指针返回

答案 1 :(得分:2)

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

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

#include <stdio.h>
#include <setjmp.h>

static jmp_buf buf;

void second(void) {
    printf("second\n");         // prints
    longjmp(buf,1);             // jumps back to where setjmp was called - making setjmp now return 1
}

void first(void) {
    second();
    printf("first\n");          // does not print
}

int main() {   
    if ( ! setjmp(buf) ) {
        first();                // when executed, setjmp returns 0
    } else {                    // when longjmp jumps back, setjmp returns 1
        printf("main\n");       // prints
    }

    return 0;
}

答案 2 :(得分:2)

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

(在C ++中,你可以使用异常有效地实现你想要的东西)。

答案 3 :(得分:1)

大多数语言都有例外,可以启用此类流量控制。 C没有,但它确实有setjmp / longjmp库函数来执行此操作。