C言語の設計ミスった危険な関数トップ10決めようぜ (215レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
80: 2019/12/16(月)15:17 ID:arH1mwfY(1/13) AAS
AA省
82
(2): 2019/12/16(月)16:51 ID:arH1mwfY(2/13) AAS
AA省
83: 2019/12/16(月)16:55 ID:arH1mwfY(3/13) AAS
"短い処理"をいちいち関数にしなくて済むから、break 2とかはあってもいいが、
長い処理は関数にしてないとろくにテストできないんだからgotoなんていらない
94: 2019/12/16(月)22:12 ID:arH1mwfY(4/13) AAS
>>87
returnで抜けるためというか、

1. gotoで抜けたい
2. 関数にするか
3. あ、そもそもコードが複雑なんだな
4. 関数にして正解だった

こんな感じかな。

gotoで抜けたいと思う=コードが複雑になってるという警鐘だと思ってる。
96: 2019/12/16(月)22:27 ID:arH1mwfY(5/13) AAS
> で>>82みたいな意味不明な関数の分け方をすると

なんで意味不明?
そもそもその処理に意味をもたせてから言おうよw
処理に意味をもたせると、関数にしたほうが良いと思うからさ
97: 2019/12/16(月)22:32 ID:arH1mwfY(6/13) AAS
> 理由が後付けだからそうなる

質問の方が先なのに、理由を先に言えるわけがないw

Q. 多重ループから抜けるのに、gotoは必要ですか?
A. 必要ありません。多重ループが必要になるぐらい複雑なら関数にしますから

これが普通だから、後付にはならないよね。
99: 2019/12/16(月)22:38 ID:arH1mwfY(7/13) AAS
そんなにくり返し言わなくても、最初から不要だしw
104
(1): 2019/12/16(月)22:44 ID:arH1mwfY(8/13) AAS
> ・ループを抜けた後に関数の後処理が必要な場合
前処理を関数の中でするな

> ・ループを抜けた後に関数の後処理が必要な場合
戻り値を返せ

>・他、意味的に関数内で処理したい場合
自分で具体例が思いつかないなら出すな
105: 2019/12/16(月)22:45 ID:arH1mwfY(9/13) AAS
コピペミスったな

>・ループを抜けた後にローカル変数を使った処理をする場合
戻り値を返せ
107: 2019/12/16(月)22:52 ID:arH1mwfY(10/13) AAS
>>106
なにが?

ってか、もう少し具体例を書けよ。
それみれば設計がおかしいという結論になる

例えて言うなら、パーサーの処理の中でネットワークにアクセスしたい時困るから
ネットワークモジュールはグローバルにアクセスできるようにしておくべき
みたいなことを言ってるようなもんだよ。それは設計がおかしい。
110: 2019/12/16(月)22:58 ID:arH1mwfY(11/13) AAS
>>108
「ループ」という言い方がおかしい。
ループで「実装」しているのであって
やっているのはなにかの「処理」だろう?

int func(int n){
ロック
処理
アンロック
return 結果;
}
省2
119
(1): 2019/12/16(月)23:42 ID:arH1mwfY(12/13) AAS
>>118
だから意味とか汎用性とかで分けると
自然にループに抜けるときにreturnを使えば良くなるんだよ
121: 2019/12/16(月)23:48 ID:arH1mwfY(13/13) AAS
>>112
だから「ループ」と書くなっちゅうねんw
関数を設計するならこんな感じやろ?

int func(int n){
int a[10] = {0};
memset_random(a, sizeof(a)); // a配列をランダムな値で埋める
int chksum = chksum(a, sizeof(a)); // a配列のチェックサムを計算
return 値
}

関数の中でループしてようが何して用が関係ないわ
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.015s