2

setjmp/longjmp を使用して簡単なことをしようとしています。ユーザーに Enter キーを何度も押すように依頼し、ユーザーが何か他のものを挿入すると、longjmp を使用してプロセスを再起動します。

カウンターを使用して機能するかどうかを確認しています。このカウンターは開始時に0ですが、longjmpを使用するとカウンターは1から再開します。

#include <stdio.h>
#include <setjmp.h>
jmp_buf buffer;
char inputBuffer[512];

void handle_interrupt(int signal) {
    longjmp(buffer, 0);
}

int main(int argc, const char * argv[]) {
    int counter = 0;
    counter = setjmp(buffer); // Save the initial state.

    printf("Counter: %d\n", counter);

    printf("\nWelcome in the jump game, press enter (nothing else!): \n");
    while (fgets(inputBuffer, sizeof(inputBuffer), stdin)) {
        if (*inputBuffer == '\n') { // If user press Enter
            counter++;
            printf("%d\n\n", counter);
            printf("Again: \n");
        } else {
            handle_interrupt(0);
        }
    }
}

出力:

pc3:Assignement 3 ArmandG$ ./tictockforever
Counter: 0

Welcome in the jump game, press enter (nothing else!): 

1

Again: 

2

Again: 
StackOverflow
Counter: 1

Welcome in the jump game, press enter (nothing else!): 

2

Again: 

このコードがばかげていることはわかっています。単純な例で setjmp/longjmp を使用しようとしています。

4

2 に答える 2

6

setjmp最初に直接返すときのみ 0 を返します。

それ以外の場合は、0 を渡さない限りlongjmp、に渡したものを返します 。その場合は 1 を返します。

于 2014-10-12T20:27:40.033 に答える