No.5ベストアンサー
- 回答日時:
longjmp()という方法があります。
でも、絶対使わないほうが良いと思います。
例文を載せます。
-- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< --
#include <stdio.h>
#include <setjmp.h>
jmp_buf env;
void
ugly(void)
{
printf("enter ugly()\n");
printf(" Press [CR]");
getchar();
longjmp(env, -1);
printf("この文はugly()の中で実行されることはありません。\n");
}
int
main(void)
{
if (setjmp(env) == 0) {
printf("call ugly()\n");
printf(" Press [CR]");
getchar();
ugly();
printf("この文はmain()の中で実行されることはありません。\n");
}
else {
printf("ugly()からlongjmp()で戻りました。\n");
}
return 0;
}
No.4
- 回答日時:
> main関数以外の関数からmainのreturnに移動して終了するにはどうすればよろしいのでしょうか?
exitやabortでは、mainのreturnに移動するわけではないので、使えませんね。
> main関数以外の関数からgotoでreturnの前まで移動しようとしたら関数を飛び越えて移動できませんとエラーが起こりました。関数をこえて強制終了させる方法を知っている方お願いします。教えてください。
C++であれば、例外を送出するのが普通のやり方ですが、この方法ではmainに戻る前にcatchされてしまうと、目的を果たせません。したがって確実な方法はないと思います。
Cであれば、setjmp/longjmpの組を使えば実現可能です。
#include <setjmp.h>
jmp_buf env;
void func(void)
{
longjmp(env, 1);
}
int main(void)
{
if (setjmp(env) == 0)
{
func();
}
return 0;
}
のようにすれば、関数の枠組みを飛び越えることができます。
ただ、今回初めてこの方法を知ったのであれば、使わない方が無難です。使うなら、そのメリット・デメリットのほか、特性を十分に理解してからにしてください。
No.3
- 回答日時:
#1です。
書き忘れたのでひとつ。
gotoはやむ終えない場合を除き、使わないほうがいいですよ。
大きくなっても、コードで書いたほうが読みやすい。
読みやすいということは複数人での作業が容易になります。
No.1
- 回答日時:
#include <stdlib.h>
exit(0);// 正常終了なら0、異常なら1
http://www9.plala.or.jp/sgwr-t/c/sec07.html#s7-4
ここら辺を参照するとよいかも。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# C言語のwhileを含む関数について 2 2022/12/16 12:28
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CTRL+Dでループを抜けるには
-
コンパイルエラーについて
-
入力したお金の金額からお札の...
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
4の倍数を論理演算で表す。。
-
Segmentation fault
-
三角形の判別
-
両替プログラムなど
-
WM_CLOSEで閉じれないウィンド...
-
ヌメロンの対戦相手
-
関数をこえてプログラムを強制...
-
c言語でAからZまでを表示する...
-
矢印キーの反応が悪くなります
-
CPU温度・負荷等を調べるには
-
C言語について
-
【C言語教えてください】sin波...
-
unsigned int型について
-
Cプログラムについて
-
なぜに0が表示されるの?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
strcmp
-
コンパイルエラーについて
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
cshの文字列操作(0埋め)
-
4の倍数を論理演算で表す。。
-
C言語 プログラミング
-
%P と %X の違い
-
8人分のテストの点数を入力し、...
-
C言語での、年複利の計算方法...
-
printf( " %2d", p * q );
-
hit&bolwのプログラミングがで...
-
scanfに文字が入力されたときに...
-
error C2143: 構文エラー : ';'...
-
printfの出力内の文字をdefine...
-
テキストカーソル位置の取得
-
unsigned int型について
おすすめ情報