ID非公開

2021/3/1 3:10

66回答

「成功時に処理をする」のネストの書き方

C言語関連46閲覧

ベストアンサー

0

ThanksImg質問者からのお礼コメント

ありがとうございます! do-while(0)文は画期的ですね! 何故かgoto文禁止になっているので、do-while(0)文を使いたいと思います! ありがとうございました!

お礼日時:3/5 21:28

その他の回答(5件)

0

処理内容にもよりますが、40個の処理を関数にする方法はあります。 それを関数ポインタの配列に入れループで40回すとか。 インタープリターみたいにファイルから読み込んだコマンドに従い処理する時によく使う方法です。

0

if()文一個で以下のように記述すればよいのでは? if ( ㅤㅤ(a > 0) && ㅤㅤ(b += 4, b > 0) && ㅤㅤ(c > 0) ㅤ) C言語では","で区切った処理は左から処理され、最後のセンテンスの値が評価されます。 フラグを何十個もチェックするのはPLCではよくある処理ですね。

0

>わざわざ関数を宣言する必要があるのか疑問に思います セルフ洗脳します つまり、「関数で書くのは正しい」と思い込みます あなたの価値感を変える、捻じ曲げてしまえばいいからです なので、「これは正しい正しい正しい正しい」と思い込みます 最大の原因はあなたの脳みその内部にのみ存在するからです

1

> 今回は処理40ぐらいあってネスト まず、40の処理は順次実行しているのでしょうから、まとめて処理の結果を判定するのはちょっとおかしくないでしょうか? 有り得ないとは思いませんが、一般的には1の処理が失敗したら2以降の処理は行わない、2が失敗したら3以降は・・・のような形ですよね。 ですので、おそらく書き方としては、 if(!処理1){ __return; } if(!処理2){ __return; } の記述になると思います。 まとめてやるなら、 if(!処理1 || !処理2 || !処理3・・・・・){ return; } の形でしょうね。 もしくは、大半のコード自体はそのままでコンパイラをC++に変更し、例外を使うと言う手も有ります。例外を使えば、 try{ __処理1 __処理2 __処理3 ・・・・ }catch(例外 e){ return 0 } と書けます。 各処理ではreturnで結果を返すのではなく、失敗時はthrowで例外を発生させます。

1人がナイス!しています

0

各段階の失敗時には、何か処理があるのでしょうか? もし、何も無く最後に飛ぶだけであれば、 各処理を必ず、成功=1、失敗=0を返すと決めて…… if( 処理1 && 処理2 && 処理3 && ……){ 全てに成功したときの処理 } else { 1つでも失敗した時の処理 (必要であれば) } とすると、順番に、処理1から実行され、結果が、0=偽となった時点で、 その後の処理は飛ばして、失敗時の処理に飛びます。 論理演算子のショートサーキットという機能です。 &&で繋いだ場合、途中1つでも偽があれば、結果は偽で決定なので、 それ以降は判定そのものをショートカットします。 もし、ifの()の中に長々書くのが微妙な場合は、 int f = 処理1 && 処理2 && 処理3 && 処理4……; if(f){ 全て成功した場合 } else { 1つでも失敗した場合 } なんて風にも書けます。 &&のショートカットが働くのはifの中だけではないので。 各段階毎にそれぞれ成功時失敗時の独自の処理がある場合は…… 構造体と関数ポインタとかでひとまとめにして、配列に入れてループでもさせるとかもできますが、これは結構難しいです。