!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C17
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
C23 最新ドラフト
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3047.pdf
C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/
※前スレ
C言語なら俺に聞け 160
https://mevius.5ch.net/test/read.cgi/tech/1672191630/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C言語なら俺に聞け 161
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (ワッチョイ 0f63-sFbk)
2023/04/21(金) 14:05:20.18ID:rqj2HSDF0983デフォルトの名無しさん (アウアウウー Sad5-g+2W)
2023/10/30(月) 10:15:44.95ID:xnp7PI6ya >>973-974
Nim の defer 良いよね
Nim の defer 良いよね
984デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 10:17:23.47ID:hHEGE8Ol0 正常ルートは終わる時 q==NULL なのに、その前の
defer free(q) したときのqの値でfree() するんですね
うへぇ…
誤解釈してバグ出しそう
てかこれは、ひねり出された意地悪サンプルで…実際のプログラミングでdefer式が効果的となる使用例ではない、ですよね?
defer free(q) したときのqの値でfree() するんですね
うへぇ…
誤解釈してバグ出しそう
てかこれは、ひねり出された意地悪サンプルで…実際のプログラミングでdefer式が効果的となる使用例ではない、ですよね?
985デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 10:34:41.68ID:hHEGE8Ol0 この話で改めてあぶり出されるのは、
あるプログラミング言語を深く理解して「書ける」「読める」ようになることには「自分なりの 上手なエラー処理の書き方 を探して身に付ける」事が含まれる、って事ですよね。
それは人類の資産なんだけど、実際の存在場所は あまたのプログラマー達の脳内 であって、一朝一夕に書き換えられる物じゃない。
だから言語仕様を改定して新機能を足すのは、新言語を作る時よりは慎重になる必要がある、と解釈しました
あるプログラミング言語を深く理解して「書ける」「読める」ようになることには「自分なりの 上手なエラー処理の書き方 を探して身に付ける」事が含まれる、って事ですよね。
それは人類の資産なんだけど、実際の存在場所は あまたのプログラマー達の脳内 であって、一朝一夕に書き換えられる物じゃない。
だから言語仕様を改定して新機能を足すのは、新言語を作る時よりは慎重になる必要がある、と解釈しました
986デフォルトの名無しさん (スプッッ Sd73-cQ99)
2023/10/30(月) 11:45:07.40ID:Ccd5zWuDd nullptrはもっと早く入れるべきだった。
987はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b3e-g5YV)
2023/10/30(月) 11:57:46.53ID:I7fISnX+0 >>984
Go でどうだか知らんけど C に defer を入れたとしたらというテーマでの話なら
malloc と free を対応づけるのは考えられる用途の筆頭でしょ。
逆にこういう変則的な評価規則を持ち込まないとしたら、
つまり defer 文に書いたものが単に return の直前に評価されるだけということにしたら
途中で書き換えられる可能性が出てきて
前準備と後始末が対応づいているかどうか一目瞭然とはいかなくなる。
どこかしらでなんか汚い感じにはなるよ。
そういう汚さを受け入れてもなお欲しいほどの利便性かというとやっぱり疑問は残る。
汚さを受け入れていいなら goto の汚さを受け入れるのとそんなに差があるとも思えないし。
Go でどうだか知らんけど C に defer を入れたとしたらというテーマでの話なら
malloc と free を対応づけるのは考えられる用途の筆頭でしょ。
逆にこういう変則的な評価規則を持ち込まないとしたら、
つまり defer 文に書いたものが単に return の直前に評価されるだけということにしたら
途中で書き換えられる可能性が出てきて
前準備と後始末が対応づいているかどうか一目瞭然とはいかなくなる。
どこかしらでなんか汚い感じにはなるよ。
そういう汚さを受け入れてもなお欲しいほどの利便性かというとやっぱり疑問は残る。
汚さを受け入れていいなら goto の汚さを受け入れるのとそんなに差があるとも思えないし。
988デフォルトの名無しさん (ワッチョイ d95d-kYJB)
2023/10/30(月) 12:40:32.59ID:2SouKz/I0 >>980
意地でもgoto使いたくない時にはそれでもいいけど、それの欠点は中にswitch文を書くと、breakで抜けれるのはswitch文からだけになる事だな
自分ではwhileを抜けた気になって実は抜けてないという、微妙なバグを生み出す可能性があるなw
意地でもgoto使いたくない時にはそれでもいいけど、それの欠点は中にswitch文を書くと、breakで抜けれるのはswitch文からだけになる事だな
自分ではwhileを抜けた気になって実は抜けてないという、微妙なバグを生み出す可能性があるなw
989デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 16:19:29.96ID:hHEGE8Ol0990デフォルトの名無しさん (ワッチョイ 13ad-c8RC)
2023/10/30(月) 16:52:46.78ID:bW5EQkS/0 >>989
適当だけどこういうことでは?
{int rc=0; do{ ★始め
処理1
siwtch(x){
case 0: rc=1; break; ★失敗した ※siwtchから抜けるだけでwhileからは抜け出せていない
case 1: break; ★成功だけど処理2は実行しない ※siwtchから抜けるだけでwhileからは抜け出せていない
case 2: break; ★成功で処理2も行う
}
処理2
break; ★成功した
} while(0); if(rc) { ★
異常時処理
}} ★終り
適当だけどこういうことでは?
{int rc=0; do{ ★始め
処理1
siwtch(x){
case 0: rc=1; break; ★失敗した ※siwtchから抜けるだけでwhileからは抜け出せていない
case 1: break; ★成功だけど処理2は実行しない ※siwtchから抜けるだけでwhileからは抜け出せていない
case 2: break; ★成功で処理2も行う
}
処理2
break; ★成功した
} while(0); if(rc) { ★
異常時処理
}} ★終り
991デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 16:58:35.91ID:hHEGE8Ol0 >>990
おっしゃる事、分かります。具体的に書いてくれてありがとうm(_ _)m
おっしゃる事、分かります。具体的に書いてくれてありがとうm(_ _)m
992デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 17:01:08.71ID:hHEGE8Ol0 >>987
はい…
mallocとfreeを確保と解放の例とするのは異論ないです
deferより一つ上位の話は、エラー処理をバグなく、分かりやすく書こうというテーマだ、で合ってますよね。
その上で、deferがないとこんな面倒なのが、deferがあるとこんなに分かりやすい 例がよいのです
確保と解放の書き方検討で、私が検討するのは例えばこんな感じです:
■(1)ある意味のある処理単位が、リソースを 2個以上使う 場合を考えると、1個の場合より検討がよく進む。特に、
■■(1a)初期化が途中で失敗した場合、すでに確保が成功してしまった資源をどう解放するか
■■(1b)資源の変数は最初に、確保処理のエラー戻り値と同じ値で初期化をすると、スッキリする事が多い
■(2)正常ルートでの解放と、エラールートでの解放で、コードを共通とするか、別とするか。
■■(2a)確保、主、開放 の処理を、同じ「関数」で書くのと、別の「関数」に分けるのはどちらが良いか
■■(2b)「goto エラーラベル;」を好きか嫌いか
■(3)プログラマーによる解放処理の前の 「if(確保済みなら)」のガードが、必要なもの(fcloseなど)と、不要なもの(free)があるので、マニュアル確認は要る
もっと語りたいけど、レス分けます、というか時間を置きます。あまり一人が語りすぎると、嫌がる人もいますよね
はい…
mallocとfreeを確保と解放の例とするのは異論ないです
deferより一つ上位の話は、エラー処理をバグなく、分かりやすく書こうというテーマだ、で合ってますよね。
その上で、deferがないとこんな面倒なのが、deferがあるとこんなに分かりやすい 例がよいのです
確保と解放の書き方検討で、私が検討するのは例えばこんな感じです:
■(1)ある意味のある処理単位が、リソースを 2個以上使う 場合を考えると、1個の場合より検討がよく進む。特に、
■■(1a)初期化が途中で失敗した場合、すでに確保が成功してしまった資源をどう解放するか
■■(1b)資源の変数は最初に、確保処理のエラー戻り値と同じ値で初期化をすると、スッキリする事が多い
■(2)正常ルートでの解放と、エラールートでの解放で、コードを共通とするか、別とするか。
■■(2a)確保、主、開放 の処理を、同じ「関数」で書くのと、別の「関数」に分けるのはどちらが良いか
■■(2b)「goto エラーラベル;」を好きか嫌いか
■(3)プログラマーによる解放処理の前の 「if(確保済みなら)」のガードが、必要なもの(fcloseなど)と、不要なもの(free)があるので、マニュアル確認は要る
もっと語りたいけど、レス分けます、というか時間を置きます。あまり一人が語りすぎると、嫌がる人もいますよね
993デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 17:09:39.89ID:hHEGE8Ol0 てかキータで書いて、皆さんの意見を聞いて修正していったり、してみようかな…
994デフォルトの名無しさん (ワッチョイ 1989-FUJr)
2023/10/30(月) 17:17:16.34ID:hHEGE8Ol0 とりあえず次スレ立てました。即死防止の保守書き込みは要らない、で良いのかな?
C言語なら俺に聞け 162
https://mevius.5ch.net/test/read.cgi/tech/1698653580/
C言語なら俺に聞け 162
https://mevius.5ch.net/test/read.cgi/tech/1698653580/
995デフォルトの名無しさん (スプッッ Sd73-cQ99)
2023/10/30(月) 18:42:32.58ID:Ccd5zWuDd996はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 9b3e-g5YV)
2023/10/30(月) 22:27:42.13ID:I7fISnX+0 Golang の defer はあくまで関数の終わりまで遅延させる (ブロックの終わりではない) ので
呼び出される defer の個数が動的になりうるんだな。
https://go.dev/tour/flowcontrol/13
この挙動も C には馴染まなさそうだな。
呼び出される defer の個数が動的になりうるんだな。
https://go.dev/tour/flowcontrol/13
この挙動も C には馴染まなさそうだな。
997デフォルトの名無しさん (ワッチョイ 1379-JwVi)
2023/10/30(月) 22:37:34.66ID:n3VNJX5I0 俺は某画像ライブラリのリソーストラッカーみたいに開放が必要な物を全部紐付けて後で開放する仕掛けを使ってる
まあCには何にも縛られないのが良いんだし好きにしたらいいよ
まあCには何にも縛られないのが良いんだし好きにしたらいいよ
998デフォルトの名無しさん (ワッチョイ d95d-kYJB)
2023/10/30(月) 23:34:44.67ID:2SouKz/I0 構文的にはC#っぽく
using (double* p = malloc(...); free(p)) {
p を使う
}
でも良いかも知れない
これだと1ループのforに似ててCに良く馴染むな
もちろんreturnとかexitで脱出してもfreeは呼ばれる
using (double* p = malloc(...); free(p)) {
p を使う
}
でも良いかも知れない
これだと1ループのforに似ててCに良く馴染むな
もちろんreturnとかexitで脱出してもfreeは呼ばれる
999デフォルトの名無しさん (ワントンキン MM53-wL8D)
2023/10/31(火) 10:19:02.32ID:i2gAy2CGM そんなもんが規格に入るわけないんだから無駄話だろ
1000デフォルトの名無しさん (ワントンキン MM53-wL8D)
2023/10/31(火) 10:19:24.66ID:i2gAy2CGM うめ
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 192日 20時間 14分 5秒
新しいスレッドを立ててください。
life time: 192日 20時間 14分 5秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★5 [おっさん友の会★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 [ぐれ★]
- 中国側が首相答弁の撤回要求、日本側拒否★7 [夜のけいちゃん★]
- NHK会長 新語・流行語大賞ノミネート「オールドメディア」に反論「言われる筋合いはない」「新しいメディアだと思っている」 [muffin★]
- 【速報】 米大使「はっきりさせておこう、米国は尖閣諸島含め日本の防衛に全面コミット、中国がどうしようが変わらない」 [お断り★]
- 自民、経済対策で子ども1人に2万円給付へ 児童手当に上乗せ 所要額は約4000億円 [ぐれ★]
- 高市総理「あなた、やるんでしょ?あのね、稼いでね。稼げるようにしてね。稼がなきゃだめよ、稼ぐのよ!じゃあ、あとよろしく(ガチャン」 [256556981]
- 【速報】高市首相「つい言い過ぎた」 存立危機事態の答弁について [237216734]
- 【ネトウヨ悲報】基地内で女性をレイプした基地外米兵「記憶がない」 [834922174]
- 【速報】中国、水産物輸入停止★2 [989870298]
- 山上妹「統一信者から安倍自民への投票を求められた」法廷で証言 [947332727]
- 【高市訃報】ホタテ業者、死亡😇😇😇 [573041775]
