• ベストアンサー

関数の終了について

関数の呼び出し元の後続処理へ行かない方法を探しています。 void 関数1() {    while(true)    {       if(○○) break;    }  } void 関数2() {    関数1();    ***後続処理*** }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

普通、#1の回答のとおりだと思いますが、わざわざ聞いているのでsetjmp/longjmpの使い方を聞きたいのかと思ってしまいました。まあ、setjmp、longjmpはgotoと同様、それをどうしても使わないといけない合理的な理由がない限り、まず使いませんが。 #include <setjmp.h> #include <stdio.h> static jmp_buf env; void func1() { printf("func1\n"); longjmp(env, 1); } void func2() { printf("func2\n"); if (setjmp(env) != 0) { return; } func1(); printf("subsequent processing"); } int main(void) { func2(); return 0; } #1に補足すると、関数1の返り値に基づいてreturnした方が後続処理を飛ばしたいという質問にあってそうな気がします。 void 関数2() { if (!関数1()) { return; } ***後続処理*** }

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.1

int 関数1() {    while(true)    {       if(○○) return false;    }     return true; } void 関数2() {    if(関数1()) {       ***後続処理***    } }

criminal1006
質問者

補足

int型に出来ない場合はどうしますか?

関連するQ&A

専門家に質問してみよう