Use jmp_buf in multiple file

佐手、 提交于 2019-12-13 09:10:37

问题


For clearly, please view my sample

I have two files: main.cpp and myfunction.h

This is main.cpp

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

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

This is myfunction.h

#include <setjmp.h>
static jmp_buf bufJum;

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

Now, I want my screen print "1" and then print "2", but this code is uncorrect! Please, help me! Thank you so much!


回答1:


If you want to have it in multiple files, then you need to create two source files, not a single source file and a header file

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

If you are using GCC to compile these files, you can e.g. use this command line:

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

Now you have an executable program called myprogram which is made from two files.




回答2:


I don't know anything about setjmp, but you have at least one mistake in your code:

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



回答3:


You have a non-inline function defined in a .h file. While not illegal, this is pretty much always wrong.

You have a static global variable defined in a .h file. While not illegal, this is pretty much always wrong.



来源:https://stackoverflow.com/questions/11876995/use-jmp-buf-in-multiple-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!