C言語の設計ミスった危険な関数トップ10決めようぜ (215レス)
C言語の設計ミスった危険な関数トップ10決めようぜ http://mevius.5ch.net/test/read.cgi/tech/1574306624/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
1: デフォルトの名無しさん [sage] 2019/11/21(木) 12:23:44.93 ID:T7Jjyyy1 gets関数とか その他の例 https://www.jpcert.or.jp/sc-rules/c-msc24-c.html http://mevius.5ch.net/test/read.cgi/tech/1574306624/1
2: デフォルトの名無しさん [sage] 2019/11/21(木) 15:39:01.67 ID:IZBPdnFY Anal http://mevius.5ch.net/test/read.cgi/tech/1574306624/2
3: デフォルトの名無しさん [sage] 2019/11/22(金) 14:16:12.00 ID:TbHXN4jn 当時の設計なら、gets の仕様はああなる。 http://mevius.5ch.net/test/read.cgi/tech/1574306624/3
4: デフォルトの名無しさん [sage] 2019/11/22(金) 14:46:28.12 ID:vYD7HZZ7 gets()をゲッツ、puts()をプッツと読んでたな http://mevius.5ch.net/test/read.cgi/tech/1574306624/4
5: デフォルトの名無しさん [sage] 2019/11/22(金) 14:53:55.43 ID:eCK2aX+t strtokの読み方で出身地が分かる http://mevius.5ch.net/test/read.cgi/tech/1574306624/5
6: デフォルトの名無しさん [sage] 2019/11/22(金) 15:15:08.67 ID:vYD7HZZ7 >>5 それはストアトークと読んでた http://mevius.5ch.net/test/read.cgi/tech/1574306624/6
7: デフォルトの名無しさん [] 2019/11/23(土) 04:11:30.09 ID:l4WHmfnE 最大のミスは、文字列そのものをデータ型としては持たずに、 文字列はヌルで終端された不定長の文字の配列であるとしたことにある。 http://mevius.5ch.net/test/read.cgi/tech/1574306624/7
8: デフォルトの名無しさん [sage] 2019/11/23(土) 06:08:18.47 ID:eMnkZzKn どうすれば良かった? http://mevius.5ch.net/test/read.cgi/tech/1574306624/8
9: デフォルトの名無しさん [sage] 2019/11/23(土) 06:14:02.33 ID:GXkG1Oic 関数だっつうてんのに http://mevius.5ch.net/test/read.cgi/tech/1574306624/9
10: デフォルトの名無しさん [sage] 2019/11/25(月) 21:55:20.72 ID:E+NtJXA3 scanfだろjk http://mevius.5ch.net/test/read.cgi/tech/1574306624/10
11: デフォルトの名無しさん [sage] 2019/11/26(火) 04:12:31.62 ID:As19A6dg putchar()はプッチャーと読んでいた http://mevius.5ch.net/test/read.cgi/tech/1574306624/11
12: デフォルトの名無しさん [] 2019/11/26(火) 12:29:09.20 ID:dAEqoOXB scanf strtok feof http://mevius.5ch.net/test/read.cgi/tech/1574306624/12
13: デフォルトの名無しさん [sage] 2019/11/26(火) 20:24:02.10 ID:feqSm/53 C言語の関数名ってまだリンカがシンボルの先頭から6文字までしか認識しなかった頃の名残だしな 変な短縮形が多い http://mevius.5ch.net/test/read.cgi/tech/1574306624/13
14: デフォルトの名無しさん [sage] 2019/11/27(水) 03:05:40.28 ID:nQw9n1Di strcpy()とか意図しようがしまいが簡単にメモリをぶっ壊せる よくよく考えるとキチガイ過ぎる http://mevius.5ch.net/test/read.cgi/tech/1574306624/14
15: デフォルトの名無しさん [sage] 2019/11/27(水) 12:17:59.87 ID:zdI/1sLa C言語に安全性を求めるのは違う http://mevius.5ch.net/test/read.cgi/tech/1574306624/15
16: デフォルトの名無しさん [] 2019/11/27(水) 12:31:41.61 ID:KtqS+hCI time localtime http://mevius.5ch.net/test/read.cgi/tech/1574306624/16
17: デフォルトの名無しさん [sage] 2019/11/27(水) 13:15:40.24 ID:MN5dlGGA >>15 ほんそれ http://mevius.5ch.net/test/read.cgi/tech/1574306624/17
18: デフォルトの名無しさん [sage] 2019/11/27(水) 13:50:48.05 ID:pAkxzJaX >>15 根本的な所を勘違いしてる。 C言語で安全性が求められないからと言って、 C言語で作ったアプリには安全性は求められるだろ? 例えば、getsは安全に使うことが不可能なんだよ。 http://mevius.5ch.net/test/read.cgi/tech/1574306624/18
19: デフォルトの名無しさん [sage] 2019/11/27(水) 14:42:57.39 ID:MN5dlGGA 大昔に出来た関数なんだから多くを求めるな http://mevius.5ch.net/test/read.cgi/tech/1574306624/19
20: デフォルトの名無しさん [sage] 2019/11/30(土) 20:36:22.78 ID:4Da+M2q+ >>11 俺はプッキャーだった http://mevius.5ch.net/test/read.cgi/tech/1574306624/20
21: デフォルトの名無しさん [sage] 2019/11/30(土) 20:38:28.97 ID:4Da+M2q+ >>18 > 例えば、getsは安全に使うことが不可能なんだよ。 ならgetsを使わずにgetcでやればいいだけ http://mevius.5ch.net/test/read.cgi/tech/1574306624/21
22: デフォルトの名無しさん [sage] 2019/11/30(土) 21:25:24.92 ID:vRr1Hx4s 安全は考えないで設計したのでミスってはいない http://mevius.5ch.net/test/read.cgi/tech/1574306624/22
23: デフォルトの名無しさん [sage] 2019/11/30(土) 22:19:14.33 ID:Zwer7NNs アブドーラ・ザ・プッチャー http://mevius.5ch.net/test/read.cgi/tech/1574306624/23
24: デフォルトの名無しさん [sage] 2019/12/01(日) 10:49:26.54 ID:uAQAPMuh 組み込みでC言語は使うけど、10個以上の標準関数って使わないな...。 http://mevius.5ch.net/test/read.cgi/tech/1574306624/24
25: デフォルトの名無しさん [sage] 2019/12/01(日) 12:47:24.87 ID:p3Z7Nr0h memcpy / memset / memcmp strlen / str(n)cpy / str(n)cmp / str(n)cat これで10個 http://mevius.5ch.net/test/read.cgi/tech/1574306624/25
26: デフォルトの名無しさん [sage] 2019/12/01(日) 13:17:11.11 ID:W5IIwakz 組み込みで文字列扱わないことも多いね。 どんな製品でもほぼ使うのはmemset、memcpy、memcmpぐらいじゃない? http://mevius.5ch.net/test/read.cgi/tech/1574306624/26
27: デフォルトの名無しさん [sage] 2019/12/01(日) 17:41:11.15 ID:YWi4MX0G >>25 >>1のリンク先より 未チェックの時代遅れの関数 以下の関数を、未チェックの時代遅れの関数と定義する。 memcpy, strcpy, strncpy, strcat, strncat (一部抜粋) 半分あてはまってるなw >>26 memcpyは危険なので使うのはやめましょう http://mevius.5ch.net/test/read.cgi/tech/1574306624/27
28: デフォルトの名無しさん [sage] 2019/12/01(日) 20:53:25.46 ID:IKYJT3WJ C言語ではなく標準ライブラリの話かい。 http://mevius.5ch.net/test/read.cgi/tech/1574306624/28
29: デフォルトの名無しさん [sage] 2019/12/01(日) 21:25:08.28 ID:7gLQ63yc アセンブラより安全なら良いじゃん http://mevius.5ch.net/test/read.cgi/tech/1574306624/29
30: デフォルトの名無しさん [sage] 2019/12/02(月) 00:51:13.45 ID:RIgVO6ZZ memcpyが危険とか言うなら C言語使うなってことになる http://mevius.5ch.net/test/read.cgi/tech/1574306624/30
31: デフォルトの名無しさん [sage] 2019/12/02(月) 00:53:00.40 ID:RIgVO6ZZ >>28 標準じゃない関数だと... 失敗談みたいなのを期待してた? http://mevius.5ch.net/test/read.cgi/tech/1574306624/31
32: デフォルトの名無しさん [sage] 2019/12/02(月) 02:04:59.50 ID:AAYR8Yqw >>1 セキュリティ考慮していない元関数より、代替関数の設計ミスが酷いな strtodとかなにこれw エラーの返し方がアホすぎる http://mevius.5ch.net/test/read.cgi/tech/1574306624/32
33: デフォルトの名無しさん [sage] 2019/12/02(月) 06:48:47.55 ID:kJrDK+4B >>32 > strtodとかなにこれw > エラーの返し方がアホすぎる そう言うのは改善案を提案しないと単なるアホの独り言にしかならんぞw http://mevius.5ch.net/test/read.cgi/tech/1574306624/33
34: デフォルトの名無しさん [sage] 2019/12/02(月) 13:15:48.70 ID:EYnQFBh2 一体どういう考えで昔の人は、getsの仕様はあれでOKだと思ったんだろう? どう考えてもバッファオーバーフローするやん? しない方法なんて存在するの? http://mevius.5ch.net/test/read.cgi/tech/1574306624/34
35: デフォルトの名無しさん [sage] 2019/12/02(月) 13:18:13.53 ID:xJykAg3Z バッファオーバーフローしないデータを食わせれば良い わざわざ変なデータを入力するヤツが悪い って考えの時代の関数だ http://mevius.5ch.net/test/read.cgi/tech/1574306624/35
36: デフォルトの名無しさん [sage] 2019/12/02(月) 13:41:09.67 ID:EYnQFBh2 でもさ、getsってキーボード入力やろ? http://mevius.5ch.net/test/read.cgi/tech/1574306624/36
37: デフォルトの名無しさん [sage] 2019/12/02(月) 15:30:07.33 ID:LC/c96JG gets は、もう、標準ライブラリにも入っていないので許せ http://mevius.5ch.net/test/read.cgi/tech/1574306624/37
38: デフォルトの名無しさん [sage] 2019/12/02(月) 18:02:20.65 ID:kmSxls5X >>36 わざわざ変なデータを入力するヤツが悪い http://mevius.5ch.net/test/read.cgi/tech/1574306624/38
39: デフォルトの名無しさん [sage] 2019/12/02(月) 18:41:59.62 ID:E2hgf+6B ダンディ坂野「gets!!」 http://mevius.5ch.net/test/read.cgi/tech/1574306624/39
40: デフォルトの名無しさん [sage] 2019/12/02(月) 20:50:15.44 ID:kJrDK+4B >>36 1行80文字とかって決め打ちできる環境なんでしょ 自分しか使わないようなツールとかならこれで十分 って考え http://mevius.5ch.net/test/read.cgi/tech/1574306624/40
41: デフォルトの名無しさん [] 2019/12/03(火) 01:51:02.34 ID:dBsSbed7 8ビットの整数型を char などというものにしたのも、アメリカ人は 自分たちの英語しか知らない田舎者であることを如実に表している。 http://mevius.5ch.net/test/read.cgi/tech/1574306624/41
42: デフォルトの名無しさん [] 2019/12/03(火) 09:14:31.49 ID:yN5r9ueQ >>40 64kbでも広大な空間だったな http://mevius.5ch.net/test/read.cgi/tech/1574306624/42
43: デフォルトの名無しさん [sage] 2019/12/03(火) 12:22:07.21 ID:90Sp73uq >>41 実に田舎者の考え方で笑える 逆だよ、都会の人間は都会のことしか知らないし知る必要がない なぜか田舎の人間は都会のことも知ろうとするw http://mevius.5ch.net/test/read.cgi/tech/1574306624/43
44: デフォルトの名無しさん [sage] 2019/12/03(火) 12:29:35.88 ID:Uh1tIUQA > 逆だよ、都会の人間は都会のことしか知らないし知る必要がない だから世界が狭くて無知になりやすい > なぜか田舎の人間は都会のことも知ろうとするw だから世界が広い http://mevius.5ch.net/test/read.cgi/tech/1574306624/44
45: デフォルトの名無しさん [] 2019/12/03(火) 12:51:15.68 ID:dBsSbed7 井の中の蛙 大海を知らず されど空の蒼さを知る http://mevius.5ch.net/test/read.cgi/tech/1574306624/45
46: デフォルトの名無しさん [sage] 2019/12/03(火) 13:25:13.55 ID:g2sdmHcp C言語が出来た時の時代を考えれば十分 「変数名に日本語が使えない言語は糞」 って時代もそのうち来るよ http://mevius.5ch.net/test/read.cgi/tech/1574306624/46
47: デフォルトの名無しさん [sage] 2019/12/03(火) 19:14:24.81 ID:90Sp73uq >>44 残念ながらそうはなってないんだなw 狭く深くっていう世界だから 要するに田舎でな何をするにもオーバーヘッドが大きいってことな 今はネットでだいぶマシになったけどネット以前の情報収集考えたらアホでもわかる話 http://mevius.5ch.net/test/read.cgi/tech/1574306624/47
48: デフォルトの名無しさん [sage] 2019/12/08(日) 02:33:17.34 ID:aqWVKWA+ アホなデータ食わせるアホなやつのために堅牢な仕組みにする必要はない http://mevius.5ch.net/test/read.cgi/tech/1574306624/48
49: デフォルトの名無しさん [sage] 2019/12/11(水) 01:29:51.60 ID:7IDmuKiG >>41 元々は9bit http://mevius.5ch.net/test/read.cgi/tech/1574306624/49
50: デフォルトの名無しさん [] 2019/12/11(水) 06:55:08.36 ID:IbA4V9X0 >>46 メモリが640kバイトしか使えなかった頃からのものだしな http://mevius.5ch.net/test/read.cgi/tech/1574306624/50
51: デフォルトの名無しさん [sage] 2019/12/11(水) 07:59:10.55 ID:yA/FdCBI >>5 ストラトック http://mevius.5ch.net/test/read.cgi/tech/1574306624/51
52: デフォルトの名無しさん [sage] 2019/12/11(水) 15:20:43.27 ID:JkExA39E 大昔って端末やエディタなんかでも1行256とか1024バイト程度しか扱えなかったばず http://mevius.5ch.net/test/read.cgi/tech/1574306624/52
53: デフォルトの名無しさん [] 2019/12/11(水) 15:32:22.68 ID:8OP/pbId 256 の時代は割と長かった希ガス http://mevius.5ch.net/test/read.cgi/tech/1574306624/53
54: デフォルトの名無しさん [sage] 2019/12/13(金) 06:37:32.10 ID:o1f1J6fH 昔は1行の長さを先に決めてファイルをクリエイトしました 途中で変更はできません http://mevius.5ch.net/test/read.cgi/tech/1574306624/54
55: デフォルトの名無しさん [] 2019/12/14(土) 13:26:55.02 ID:TlZt0bii 関数そのものじゃないが breakにラベル指定出来なかったのは設計ミスやろ http://mevius.5ch.net/test/read.cgi/tech/1574306624/55
56: デフォルトの名無しさん [sage] 2019/12/14(土) 13:54:03.80 ID:JwYnIOEa その為のgoto http://mevius.5ch.net/test/read.cgi/tech/1574306624/56
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
77: デフォルトの名無しさん [sage] 2019/12/16(月) 13:21:05.83 ID:ZZ8St2Js マクロで二重以上のループってのもなかなか考えづらいなあ 一応、ラベル名をパラメータとする手もある 使う側のコストを考えるとgotoの為にパラメータを増やさないよな gotoを使わない主義者がよくやってるように 余分な変数を使って実装するんだろうね http://mevius.5ch.net/test/read.cgi/tech/1574306624/77
78: デフォルトの名無しさん [sage] 2019/12/16(月) 13:23:11.26 ID:ZZ8St2Js アセンブラだとマクロローカルラベルってのがあったりする ラベルを頻繁に使うので あと @@/@b/@fのように、 直近のラベルを指定する仕組みもある http://mevius.5ch.net/test/read.cgi/tech/1574306624/78
79: デフォルトの名無しさん [sage] 2019/12/16(月) 13:28:49.41 ID:ZZ8St2Js >>72 >>73 みたいなのって gotoの使いどころだと思うんだけだ gotoを使わない人はどう書いてるの? 特に >>57 の答えを聞いてみたい http://mevius.5ch.net/test/read.cgi/tech/1574306624/79
80: デフォルトの名無しさん [sage] 2019/12/16(月) 15:17:28.75 ID:arH1mwfY void print_data(void) { for (i = 1; i <= 3; i++) { for (j = 1; j <= 3; j++) { printf("%d, %d\n", i, j); if (i * j > 3) return; } } } print_data(); printf("complete\n"); http://mevius.5ch.net/test/read.cgi/tech/1574306624/80
81: デフォルトの名無しさん [sage] 2019/12/16(月) 16:34:59.64 ID:/0yHEQmX outer より後に処理が続く場合は? http://mevius.5ch.net/test/read.cgi/tech/1574306624/81
82: デフォルトの名無しさん [sage] 2019/12/16(月) 16:51:44.02 ID:arH1mwfY void print_data(void) { for (i = 1; i <= 3; i++) { for (j = 1; j <= 3; j++) { printf("%d, %d\n", i, j); if (i * j > 3) return; } } } print_data(); outer より後に処理が続く場合 printf("complete\n"); http://mevius.5ch.net/test/read.cgi/tech/1574306624/82
83: デフォルトの名無しさん [sage] 2019/12/16(月) 16:55:03.26 ID:arH1mwfY "短い処理"をいちいち関数にしなくて済むから、break 2とかはあってもいいが、 長い処理は関数にしてないとろくにテストできないんだからgotoなんていらない http://mevius.5ch.net/test/read.cgi/tech/1574306624/83
84: デフォルトの名無しさん [sage] 2019/12/16(月) 19:03:13.17 ID:4DgO9d+i じゃあ>>57もいらないね http://mevius.5ch.net/test/read.cgi/tech/1574306624/84
85: デフォルトの名無しさん [sage] 2019/12/16(月) 19:09:09.12 ID:lsrBHsJG gotoの基本的な使い方くらい知っておいた方が良いかと ループを抜ける為だけに関数を分けないといけなくなるし 挙げ句の果てに言語の欠陥とか言い出す http://mevius.5ch.net/test/read.cgi/tech/1574306624/85
86: デフォルトの名無しさん [sage] 2019/12/16(月) 20:06:51.00 ID:3ha1TSe5 今のC言語ではネストしたループから抜けるのはフラグを使うかgotoしかないからたいていgoto使ってるけどgotoなんて野蛮なものはできたら使いたくないから他の言語で実装されてるラベル付きbreakなりレベル付きbreakが欲しいって話だろ 今更gotoの基本的な使い方ガーとか言ってる奴はどんだけ低レベルなんだよw http://mevius.5ch.net/test/read.cgi/tech/1574306624/86
87: デフォルトの名無しさん [sage] 2019/12/16(月) 20:09:28.82 ID:xr9KOlE0 あれ? returnで抜ける為に関数に分けるんじゃなかったの? http://mevius.5ch.net/test/read.cgi/tech/1574306624/87
88: デフォルトの名無しさん [sage] 2019/12/16(月) 20:21:09.65 ID:xr9KOlE0 gotoは野蛮とかいう歪んだ教育のせいで わざわざ変数を定義したりわざわざ関数を分けたりして わざわざ見にくいコードにしちゃう 生でポインタを扱う野蛮なC言語なんか使わないで 上品な言語を使った方が良いよ http://mevius.5ch.net/test/read.cgi/tech/1574306624/88
89: デフォルトの名無しさん [sage] 2019/12/16(月) 20:28:02.60 ID:jL52ryYk gotoじゃなくてgodowntoなら誰も文句言わなかった http://mevius.5ch.net/test/read.cgi/tech/1574306624/89
90: デフォルトの名無しさん [sage] 2019/12/16(月) 20:47:58.36 ID:LjjtFzBx 自分は小規模な字句解析みたいなのでもgoto使うことがある。 ラベルで状態を表してgotoで遷移する。 goto使わなかったら状態を変数に入れて、 ループの中でswitchで場合分けするようなコードになって辛い。 http://mevius.5ch.net/test/read.cgi/tech/1574306624/90
91: デフォルトの名無しさん [sage] 2019/12/16(月) 20:52:55.59 ID:DbnQVwfE ループの中のswitchでループを抜けるのに gotoを使うんじゃ? http://mevius.5ch.net/test/read.cgi/tech/1574306624/91
92: デフォルトの名無しさん [sage] 2019/12/16(月) 21:41:34.22 ID:wRV+mRkt 次の状態を返す関数ポインタでループすればいんじゃないの? http://mevius.5ch.net/test/read.cgi/tech/1574306624/92
93: デフォルトの名無しさん [sage] 2019/12/16(月) 21:45:33.24 ID:jhycq5nX そんな野蛮なことはしません http://mevius.5ch.net/test/read.cgi/tech/1574306624/93
94: デフォルトの名無しさん [sage] 2019/12/16(月) 22:12:14.62 ID:arH1mwfY >>87 returnで抜けるためというか、 1. gotoで抜けたい 2. 関数にするか 3. あ、そもそもコードが複雑なんだな 4. 関数にして正解だった こんな感じかな。 gotoで抜けたいと思う=コードが複雑になってるという警鐘だと思ってる。 http://mevius.5ch.net/test/read.cgi/tech/1574306624/94
95: デフォルトの名無しさん [sage] 2019/12/16(月) 22:22:18.57 ID:xr9KOlE0 で>>82みたいな意味不明な関数の分け方をすると >>57は、より複雑な記述をしたいっていう主張だし gotoに親を殺された人の言うことは支離滅裂 理由が後付けだからそうなる http://mevius.5ch.net/test/read.cgi/tech/1574306624/95
96: デフォルトの名無しさん [sage] 2019/12/16(月) 22:27:34.28 ID:arH1mwfY > で>>82みたいな意味不明な関数の分け方をすると なんで意味不明? そもそもその処理に意味をもたせてから言おうよw 処理に意味をもたせると、関数にしたほうが良いと思うからさ http://mevius.5ch.net/test/read.cgi/tech/1574306624/96
97: デフォルトの名無しさん [sage] 2019/12/16(月) 22:32:01.57 ID:arH1mwfY > 理由が後付けだからそうなる 質問の方が先なのに、理由を先に言えるわけがないw Q. 多重ループから抜けるのに、gotoは必要ですか? A. 必要ありません。多重ループが必要になるぐらい複雑なら関数にしますから これが普通だから、後付にはならないよね。 http://mevius.5ch.net/test/read.cgi/tech/1574306624/97
98: デフォルトの名無しさん [sage] 2019/12/16(月) 22:37:09.13 ID:xr9KOlE0 じゃ>>57も当然不要ですね http://mevius.5ch.net/test/read.cgi/tech/1574306624/98
99: デフォルトの名無しさん [sage] 2019/12/16(月) 22:38:17.80 ID:arH1mwfY そんなにくり返し言わなくても、最初から不要だしw http://mevius.5ch.net/test/read.cgi/tech/1574306624/99
100: デフォルトの名無しさん [sage] 2019/12/16(月) 22:39:57.37 ID:xr9KOlE0 じゃあ>>57はどういうつもりで書いたんでしょうかね? http://mevius.5ch.net/test/read.cgi/tech/1574306624/100
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 115 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.021s