C言語の設計ミスった危険な関数トップ10決めようぜ (215レス)
C言語の設計ミスった危険な関数トップ10決めようぜ http://mevius.5ch.net/test/read.cgi/tech/1574306624/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
57: デフォルトの名無しさん [] 2019/12/14(土) 22:43:29.04 ID:8CJijD11 gotoはラベルのスコープが広いから使いにくい。ループごとに別のラベル名を 付けないといけないし、ラベル名を別のループ用のものと書き間違えると 意図しない所へ飛んで行ってしまう。スパゲッティでバグの元。 ループにラベルを付ければ、スコープがそのループ内に限定され、そのループの 外にある別のループに同じラベル名を付けることができるから、書きやすく 読みやすい。例えば、こんな感じ。 for @outer (i = 1; i <= 3; i++) { for (j = 1; j <= 3; j++) { printf("%d, %d\n", i, j); if (i * j > 3) break @outer; } } for @outer (i = 1; i <= 5; i++) { for (j = 1; j <= 5; j++) { printf("%d, %d\n", i, j); if (i * j > 5) break @outer; } } http://mevius.5ch.net/test/read.cgi/tech/1574306624/57
58: デフォルトの名無しさん [sage] 2019/12/14(土) 22:45:51.60 ID:JwYnIOEa 単純に breakする数を指定出来るだけで良い http://mevius.5ch.net/test/read.cgi/tech/1574306624/58
59: デフォルトの名無しさん [sage] 2019/12/15(日) 06:50:28.91 ID:6aWNd1w0 >>58 ネストの数を数えるとか最低だと思う http://mevius.5ch.net/test/read.cgi/tech/1574306624/59
60: デフォルトの名無しさん [sage] 2019/12/15(日) 07:00:06.17 ID:a0yEED8b 1000行のコードでbreak 7;とかされても、 どこに抜けるかわからんよな! http://mevius.5ch.net/test/read.cgi/tech/1574306624/60
61: デフォルトの名無しさん [sage] 2019/12/15(日) 09:51:38.77 ID:5sPbacoo ネストの数がわからないような巨大な構造は それだけで最低だ そんなんだと名前付きループにした所で @outerなんて名前が使い回されて 同じ名前のループがネストされて それこそ難読コードになる それならユニークなラベルによるgotoの方が良い >>57くらいのループなら break 2; は名前を考える手間が無くて楽だし 見にくくもない http://mevius.5ch.net/test/read.cgi/tech/1574306624/61
62: デフォルトの名無しさん [sage] 2019/12/15(日) 09:57:28.64 ID:5sPbacoo とは書いたけど どっちも有るならどっちも欲しい どっちかだけげならbreak 2;の方が欲しい って感じ http://mevius.5ch.net/test/read.cgi/tech/1574306624/62
63: デフォルトの名無しさん [sage] 2019/12/15(日) 10:52:04.89 ID:6aWNd1w0 >>61 > そんなんだと名前付きループにした所で > @outerなんて名前が使い回されて > 同じ名前のループがネストされて > それこそ難読コードになる 無能の妄想w http://mevius.5ch.net/test/read.cgi/tech/1574306624/63
64: デフォルトの名無しさん [sage] 2019/12/15(日) 11:05:09.82 ID:5sPbacoo ループの先頭、ループの終わり、break部分 3箇所見ないとダメってだけでダメな仕様 http://mevius.5ch.net/test/read.cgi/tech/1574306624/64
65: デフォルトの名無しさん [sage] 2019/12/15(日) 12:32:17.60 ID:bDjAMWVj >>64 なぜか自分の前提は > >>57くらいのループなら なのにラベルにした途端にループの頭とbreakとループの終わりが一瞥でわからないとかアホすぎ http://mevius.5ch.net/test/read.cgi/tech/1574306624/65
66: デフォルトの名無しさん [sage] 2019/12/15(日) 12:36:08.74 ID:5sPbacoo 大きければgoto 小さければbreak n http://mevius.5ch.net/test/read.cgi/tech/1574306624/66
67: デフォルトの名無しさん [sage] 2019/12/15(日) 12:38:50.49 ID:5sPbacoo 名前を付ける手間を許容するならgotoという解決法が既にある http://mevius.5ch.net/test/read.cgi/tech/1574306624/67
68: デフォルトの名無しさん [] 2019/12/15(日) 13:48:44.02 ID:o9m7qUoD >>60 ネスト変わるような変更あるたびにbreakの引数勝手に書き換えてくれるエディタとかマクロが流行る http://mevius.5ch.net/test/read.cgi/tech/1574306624/68
69: デフォルトの名無しさん [sage] 2019/12/15(日) 16:33:57.62 ID:bDjAMWVj >>67 ifとgotoあるからforもwhileもdoも要らんという主張か 本物のプログラマーだなw http://mevius.5ch.net/test/read.cgi/tech/1574306624/69
70: デフォルトの名無しさん [sage] 2019/12/15(日) 16:52:03.21 ID:u46gpj2V 歪んだ教育のせいで gotoに拒絶反応を示す人が多いんだよな 2重ループを抜けるなら素直にgotoを使えって http://mevius.5ch.net/test/read.cgi/tech/1574306624/70
71: デフォルトの名無しさん [sage] 2019/12/15(日) 16:53:29.68 ID:pTp+dpJs アセンブラの jmp 1f とかを C でやりたいという話なのか? やってみりゃいいじゃん。プリプロセッサの出力を処理すればいい。 1 パスで出来ると思うよ。 ひょっとしてもう誰かがやってるかも。 http://mevius.5ch.net/test/read.cgi/tech/1574306624/71
72: デフォルトの名無しさん [sage] 2019/12/15(日) 18:05:59.04 ID:5sPbacoo for (i = 1; i <= 3; i++) { for (j = 1; j <= 3; j++) { printf("%d, %d\n", i, j); if (i * j > 3) goto outer; } } outer:; http://mevius.5ch.net/test/read.cgi/tech/1574306624/72
73: デフォルトの名無しさん [sage] 2019/12/15(日) 18:58:38.98 ID:5sPbacoo for (i = 1; i <= 3; i++) { for (j = 1; j <= 3; j++) { printf("%d, %d\n", i, j); if (i * j > 3) goto outer; } } printf("complete\n"); outer:; http://mevius.5ch.net/test/read.cgi/tech/1574306624/73
74: デフォルトの名無しさん [sage] 2019/12/15(日) 19:01:19.97 ID:5sPbacoo わざわざ言語拡張しなくても >>57以上の事が実現出来る http://mevius.5ch.net/test/read.cgi/tech/1574306624/74
75: デフォルトの名無しさん [sage] 2019/12/16(月) 09:05:52.89 ID:AI1GDY0I ラベルのスコープを狭くしたいという話のようだから マクロの中で使ってこそ真価を発揮するんじゃないかな。 フル仕様のパースが必要というわけではなく、かなり手抜きできそうではある。 あれば便利というのは否定しないが、C でそこまで必要かというと… http://mevius.5ch.net/test/read.cgi/tech/1574306624/75
76: デフォルトの名無しさん [] 2019/12/16(月) 12:33:03.93 ID:0jmxiGrg { goto hoge; hoge:; } { goto hoge; hoge:; } これで二重になってたら困るしある意味なってなくても困るな http://mevius.5ch.net/test/read.cgi/tech/1574306624/76
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 139 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.020s