Почему setjmp/longjmp падает на MSVC, а в MinGW нет?

Я хочу использовать setjmp()/longjmp() для реализации системы coroutine. Затем я решил написать небольшой .c-файл для тестирования. В MinGW все в порядке; я получил желаемый результат. Но когда я компилирую его в MSVC++, программа аварийно завершается: "access violation"

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

    jmp_buf a;
    int is_invoke=0;

    void 
    action_1()
    {
        for ( ;; ) {
          printf("hello~~~A\n");
          if(!setjmp(a)) {
            is_invoke=1;
            return;
          }  
        }
    }

    void 
    func()
    {
      if (is_invoke) {
        longjmp(a,1);
      }
      action_1();
      printf("end\n");
    }

    void 
    dummy()
    {
      ;
    }

    int 
    main(int argc, char *argv[])
    {
        for ( ;; )  {
          func();
          dummy();
        }
        return 0;
    }
5
задан Jonathan Leffler 25 December 2011 в 07:44
поделиться