0

エラー処理に使用しようとしてsetjmp/longjmpいますが、MSVC 2010 を使用してコンパイルすると、longjmp を呼び出すと、プログラムがコード 0 で終了します。完全なメッセージは次のとおりです。

The program '[5020] test.exe: Native' has exited with code 0 (0x0).

コードは次のとおりです。

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

int main(void)
{
    jmp_buf env;
    switch(setjmp(env))
    {
    case 0:
        printf("normal operation\n");
        longjmp(env, -2);
        break;
    case -1:
        printf("known error\n");
        break;
    default:
        printf("Unknown error!\n");
        break;
    }
    return 0;
}

gnu ベースのコンパイラ (cygwin では bfin-elf-gcc) を使用して同じコードをコンパイルしましたが、問題なく動作しました。すなわち、

$ make
bfin-elf-gcc -c -Wall main.c -mcpu=bf533-any -o main.o
bfin-elf-gcc main.o -mcpu=bf533-any -msim -o bfin_test

$ bfin-elf-run.exe bfin_test
normal operation
Unknown error!

msvcで動作しない理由はありますか?

ハサン、よろしくお願いします。

4

1 に答える 1

2

longjmp(env, -2);default:あなたのケースをトリガーし、実行されたステートメントUnknown error!から出力されます。あなたが書いたとおりに機能しています。main() から 0 を返すことは、本質的に 0 で終了することと同じです。MSVC は終了値を伝えているだけです。switchreturn 0;

于 2013-05-06T10:21:35.787 に答える