C言語の設計ミスった危険な関数トップ10決めようぜ (215レス)
C言語の設計ミスった危険な関数トップ10決めようぜ http://mevius.5ch.net/test/read.cgi/tech/1574306624/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
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
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
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
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
99: デフォルトの名無しさん [sage] 2019/12/16(月) 22:38:17.80 ID:arH1mwfY そんなにくり返し言わなくても、最初から不要だしw http://mevius.5ch.net/test/read.cgi/tech/1574306624/99
104: デフォルトの名無しさん [sage] 2019/12/16(月) 22:44:03.17 ID:arH1mwfY > ・ループを抜けた後に関数の後処理が必要な場合 前処理を関数の中でするな > ・ループを抜けた後に関数の後処理が必要な場合 戻り値を返せ >・他、意味的に関数内で処理したい場合 自分で具体例が思いつかないなら出すな http://mevius.5ch.net/test/read.cgi/tech/1574306624/104
105: デフォルトの名無しさん [sage] 2019/12/16(月) 22:45:01.13 ID:arH1mwfY コピペミスったな >・ループを抜けた後にローカル変数を使った処理をする場合 戻り値を返せ http://mevius.5ch.net/test/read.cgi/tech/1574306624/105
107: デフォルトの名無しさん [sage] 2019/12/16(月) 22:52:22.49 ID:arH1mwfY >>106 なにが? ってか、もう少し具体例を書けよ。 それみれば設計がおかしいという結論になる 例えて言うなら、パーサーの処理の中でネットワークにアクセスしたい時困るから ネットワークモジュールはグローバルにアクセスできるようにしておくべき みたいなことを言ってるようなもんだよ。それは設計がおかしい。 http://mevius.5ch.net/test/read.cgi/tech/1574306624/107
110: デフォルトの名無しさん [sage] 2019/12/16(月) 22:58:13.41 ID:arH1mwfY >>108 「ループ」という言い方がおかしい。 ループで「実装」しているのであって やっているのはなにかの「処理」だろう? int func(int n){ ロック 処理 アンロック return 結果; } 「処理」という名前をつけたくなるならば、 そこは独立した関数にするべきだろう http://mevius.5ch.net/test/read.cgi/tech/1574306624/110
119: デフォルトの名無しさん [sage] 2019/12/16(月) 23:42:01.03 ID:arH1mwfY >>118 だから意味とか汎用性とかで分けると 自然にループに抜けるときにreturnを使えば良くなるんだよ http://mevius.5ch.net/test/read.cgi/tech/1574306624/119
121: デフォルトの名無しさん [sage] 2019/12/16(月) 23:48:10.14 ID:arH1mwfY >>112 だから「ループ」と書くなっちゅうねんw 関数を設計するならこんな感じやろ? int func(int n){ int a[10] = {0}; memset_random(a, sizeof(a)); // a配列をランダムな値で埋める int chksum = chksum(a, sizeof(a)); // a配列のチェックサムを計算 return 値 } 関数の中でループしてようが何して用が関係ないわ http://mevius.5ch.net/test/read.cgi/tech/1574306624/121
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.028s