-2

为了清楚起见,请查看我的示例

我有两个文件: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”,但这段代码不正确!请帮我!非常感谢!

4

3 回答 3

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

主.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,它由两个文件组成。

于 2012-08-09T08:11:28.393 回答
0

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

-#include <myfunction.h>
+#include "myfunction.h"
于 2012-08-09T04:57:25.890 回答
0

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

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

于 2012-08-09T05:00:43.033 回答