在多个文件中使用jmp_buf

时间:2012-08-09 04:53:04

标签: c++ exception-handling goto setjmp

为清楚起见,请查看我的样本

我有两个文件:main.cpp和myfunction.h

这是main.cpp

#include <setjmp.h>
#include <myfunction.h>

int main()
{
   if ( ! setjmp(bufJum) ) {
      printf("1");
      func();
   } else {
      printf("2");
   }
   return 0;
}

这是myfunction.h

#include <setjmp.h>
static jmp_buf bufJum;

int func(){
   longjum(bufJum, 1);
}

现在,我希望我的屏幕打印“1”,然后打印“2”,但此代码不正确! 请帮我! 非常感谢你!

3 个答案:

答案 0 :(得分:1)

如果您想将它放在多个文件中,则需要创建两个文件,而不是单个源文件和头文件

myfunction.cpp:

#include <setjmp.h>

extern jmp_buf bufJum;  // Note: `extern` to tell the compiler it's defined in another file

void func()
{
    longjmp(bufJum, 1);
}

main.cpp中:

#include <iostream>
#include <setjmp.h>

jmp_buf bufJum;  // Note: no `static`

void func();  // Function prototype, so the compiler know about it

int main()
{
    if (setjmp(bufJum) == 0)
    {
        std::cout << "1\n";
        func();
    }
    else
    {
        std::cout << "2\n";
    }

    return 0;
}

如果您使用GCC编译这些文件,您可以例如使用此命令行:

$ g++ -Wall main.cpp myfunction.cpp -o myprogram

现在您有一个名为myprogram的可执行程序,该程序由两个文件组成。

答案 1 :(得分:0)

我对setjmp一无所知,但你的代码中至少有一个错误:

-#include <myfunction.h>
+#include "myfunction.h"

答案 2 :(得分:0)

您在.h文件中定义了非内联函数。虽然不是非法的,但这几乎总是错误的。

您在.h文件中定义了一个静态全局变量。虽然不是非法的,但这几乎总是错误的。