2016/08/23

[c/c++]私のC言語 (4)

ふだん使っているから、ネタが困ったときに何とかなるだろうと題材にしたけど、ネタがないときはないものだ。。。


for文から抜けたいことがある。

for (int lp = 0; lp < 100; lp++) {
  if (lp == 50) {
    break;
  }
}

「じゃあ50までのforにしろよ」と思われそうだが、まあ、題材としてだから気にしないでおくれ。

このように1重ならまだよいのだけど、多重になると嫌になってくる。

for (int lp1 = 0; lp1 < 100; lp1++) {
  for (int lp2 = 0; lp2 < 10; lp2++) {
    if (lp == 50) {
      ★ここで、lp1からも抜けたい
    }
  }
}

このくらいだったら、lp1を100とかにしてbreakするかな。
でも、前後に処理が入っていると、このまま流したくない場合も出てくる。
そういうのを避けるためにif文書いて。。。とやっていくのは、あまり好きではない。
Javaだと、breakにラベルが使えるからいいよなぁ。

そう考えると、breakだって書いていないラベルに向けてジャンプするようなものだし、switch-caseのbreakもそうだろう。
だったら、変にゴチャゴチャしたソースになるくらいだったらgotoで抜けた方がわかりやすいんじゃなかろうか、と思っている。

  for (int lp1 = 0; lp1 < 100; lp1++) {
    for (int lp2 = 0; lp2 < 10; lp2++) {
      if (lp == 50) {
        //★ここで、lp1からも抜けたい
        goto EXIT_FOR;
      }
    }
  }
EXIT_FOR:
  ...

goto禁止のところも多いし、下手したらswitch-case以外はbreak禁止というところもある(あった)。
goto使うのを嫌う人も多いので、まあそういうのは押しつけないのだけど、こういうのでgoto使いたい人がいるのくらいは許容してほしいなあ、と思うのだ。

 

でも、コードレビューする人からすると、いちいちそんな細かいところまでチェックしてたら時間が足りないから「もうgoto禁止!」と言ってしまいたい気持ちもわかる。
だから、staticじゃないグローバル変数とgotoは申請制度にして、こういう理由で使ってますよーっていうのが自分で言えるようであれば使ってよい、くらいがよいのではなかろうか。

うち?
うちは私がルールだから、よほどのことがない限りはOKだよ。
gotoを許可するのは、多重ループから抜けるのが面倒なときか、エラー処理のときかな。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。