C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/
C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.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言語なら俺に聞け 146
https://mevius.5ch.net/test/read.cgi/tech/1525031257/
探検
C言語なら俺に聞け 147
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/08/16(木) 23:36:02.22ID:fOCSKLtw184デフォルトの名無しさん
2018/08/23(木) 09:48:06.49ID:O7XDpWhz >>183
ある程度の規模の関数になると結局その1命令に見えるはずの処理が正確に何してるかを理解するためには関数内を覗くはめになっちゃう。
覗かないですむほど関数仕様を単純化すると今度は関数が増えて管理の手間が増える矛盾。
後者のほうが正解なんだろうけど、なかなか理想通りには行かないよね。
ある程度の規模の関数になると結局その1命令に見えるはずの処理が正確に何してるかを理解するためには関数内を覗くはめになっちゃう。
覗かないですむほど関数仕様を単純化すると今度は関数が増えて管理の手間が増える矛盾。
後者のほうが正解なんだろうけど、なかなか理想通りには行かないよね。
185デフォルトの名無しさん
2018/08/23(木) 09:52:28.00ID:XUhqK5T4 その方向性の行き着く先がオブジェクト指向
186デフォルトの名無しさん
2018/08/23(木) 09:52:54.19ID:itriZIP9 >>184
ある程度の規模ってLOCK/UNLOCKの話だぜ?
ある程度の規模ってLOCK/UNLOCKの話だぜ?
187デフォルトの名無しさん
2018/08/23(木) 10:01:30.20ID:O7XDpWhz188デフォルトの名無しさん
2018/08/23(木) 10:11:39.46ID:rN/Im7Tc >>178
ファイル数とか初めて聞いたよ。
疎結合高凝集は大抵の場面で正義だよ。トータル1000行のソースだったら好きにすればいいが。
あと関数にもファイルにも「意味のある名前をつける」
ある意味大変難しいんだがこれができれば保守性が全然違う。
ファイル数とか初めて聞いたよ。
疎結合高凝集は大抵の場面で正義だよ。トータル1000行のソースだったら好きにすればいいが。
あと関数にもファイルにも「意味のある名前をつける」
ある意味大変難しいんだがこれができれば保守性が全然違う。
189デフォルトの名無しさん
2018/08/23(木) 10:34:14.06ID:3bgfj1QZ 規模は覗かないとわからんよ
1個の関数からしか呼ばれないたった3行の、
ただ単に特定のループの終了条件を示す為の関数
結局両方見ないと意味不明
こんな関数が山ほどあるプロジェクトは悪夢だ
1個の関数からしか呼ばれないたった3行の、
ただ単に特定のループの終了条件を示す為の関数
結局両方見ないと意味不明
こんな関数が山ほどあるプロジェクトは悪夢だ
190デフォルトの名無しさん
2018/08/23(木) 10:36:26.67ID:rN/Im7Tc エディタが悪いんじゃないか?
191デフォルトの名無しさん
2018/08/23(木) 10:40:50.31ID:3bgfj1QZ たった3行の為に
関数名を考え
関数ヘッダを作成し
プロファイリングや静的解析ツールやMAPの項目も増える
大きく依存した関数なのに
グローバル関数とローカル関数を分けて書くという宗教を理由に
全然別の場所に書く
最悪ですねえ
こういう人は
ifなども含め、複数文からなる全ての条件判断を関数にするんでしょうか
あり得ないですね
もちろん単なる1個のループの終了条件ではなくて
その条件に意味があって
他でも使う可能性があるなら関数に分けるべきですが
関数名を考え
関数ヘッダを作成し
プロファイリングや静的解析ツールやMAPの項目も増える
大きく依存した関数なのに
グローバル関数とローカル関数を分けて書くという宗教を理由に
全然別の場所に書く
最悪ですねえ
こういう人は
ifなども含め、複数文からなる全ての条件判断を関数にするんでしょうか
あり得ないですね
もちろん単なる1個のループの終了条件ではなくて
その条件に意味があって
他でも使う可能性があるなら関数に分けるべきですが
192デフォルトの名無しさん
2018/08/23(木) 11:09:24.18ID:itriZIP9 >>187
改めて一般論をしても構わんが
改めて一般論をしても構わんが
193デフォルトの名無しさん
2018/08/23(木) 11:29:56.84ID:rN/Im7Tc プロファイリングのときってstaticな関数も同列に扱うもんなの?
194デフォルトの名無しさん
2018/08/23(木) 11:40:17.42ID:HinwMmX/ ある程度の規模、って
サイトによって違うんだし
一般化はできないんじゃ
サイトによって違うんだし
一般化はできないんじゃ
195デフォルトの名無しさん
2018/08/23(木) 12:10:32.95ID:O7XDpWhz >>194
地雷臭がするから煽るのやめとけってw
地雷臭がするから煽るのやめとけってw
196デフォルトの名無しさん
2018/08/23(木) 12:48:09.07ID:iNuWULI+ >>177
> 私も当然他の処理があると思った
> 無いとするとビジーループか?
> これだと気持ち悪いとかいう以前の問題になる
君のレベルが低いだけ
最近のプロセッサはロック/アンロックをハードウェアレベルで行うようになってるけどビジーループ自体は使われてる
スピンロック でググれ
> 私も当然他の処理があると思った
> 無いとするとビジーループか?
> これだと気持ち悪いとかいう以前の問題になる
君のレベルが低いだけ
最近のプロセッサはロック/アンロックをハードウェアレベルで行うようになってるけどビジーループ自体は使われてる
スピンロック でググれ
197デフォルトの名無しさん
2018/08/23(木) 15:13:34.14ID:HinwMmX/ >>195
アリガトス、鼻の敏感なお方
アリガトス、鼻の敏感なお方
198デフォルトの名無しさん
2018/08/23(木) 15:40:21.02ID:/qY100we >>191
行数の問題じゃないんだよなあ
行数の問題じゃないんだよなあ
199デフォルトの名無しさん
2018/08/23(木) 16:15:45.18ID:rN/Im7Tc 「長いから分割する」という発想で関数作ってる人は割といるんだよ。
そうするとまあコンテクストが広い範囲に分散してつらい。
そうするとまあコンテクストが広い範囲に分散してつらい。
200デフォルトの名無しさん
2018/08/23(木) 16:28:54.58ID:EgEtgRif そういえば昔客とソースレビューしてて、
引数チェックのための早期returnしてたら、
客「途中returnはやめてください」
俺「そうするとネストが深くなりすぎますよ?」
客「それなら関数に分けて下さい」
俺「分けた関数の先でも引数チェックするので同じですよ?」
客「それならその先の関数も別の関数に分けて下さい」
俺「…(反論するのめんどくせえ、言うとおりに作ってしまえ)」
結果、思い出すのも恐ろしい意味不明な関数ばかりのコードが出来上がったわ。
引数チェックのための早期returnしてたら、
客「途中returnはやめてください」
俺「そうするとネストが深くなりすぎますよ?」
客「それなら関数に分けて下さい」
俺「分けた関数の先でも引数チェックするので同じですよ?」
客「それならその先の関数も別の関数に分けて下さい」
俺「…(反論するのめんどくせえ、言うとおりに作ってしまえ)」
結果、思い出すのも恐ろしい意味不明な関数ばかりのコードが出来上がったわ。
201デフォルトの名無しさん
2018/08/23(木) 16:54:56.17ID:rN/Im7Tc 途中リターン禁止ってほんとアホだよね。要はreturnの否定だからな。
最近はMISRAからも外れてるらしいが
最近はMISRAからも外れてるらしいが
202デフォルトの名無しさん
2018/08/23(木) 17:00:42.78ID:itriZIP9 >>191
単なる1個のループの条件に意味がないことなんてあるのか?
たった3行というがlock/unlockという2行で
他のタスクが干渉しないようにガードする必要がある条件だぞ
干渉されるとしたら何でだ? それでも意味がないのか?
単なる1個のループの条件に意味がないことなんてあるのか?
たった3行というがlock/unlockという2行で
他のタスクが干渉しないようにガードする必要がある条件だぞ
干渉されるとしたら何でだ? それでも意味がないのか?
203デフォルトの名無しさん
2018/08/23(木) 18:14:09.43ID:wxGNRrqx204デフォルトの名無しさん
2018/08/23(木) 18:30:50.97ID:9jasVWpA そこまでローレベルの話じゃないと思うよ
無関係ではないけど
無関係ではないけど
205デフォルトの名無しさん
2018/08/23(木) 19:15:54.01ID:iNuWULI+206デフォルトの名無しさん
2018/08/23(木) 19:28:43.42ID:k97Awv43 じゃあハードセマフォか?
それスピンロックじゃないよな
恥の上塗りwww
それスピンロックじゃないよな
恥の上塗りwww
207デフォルトの名無しさん
2018/08/23(木) 19:51:18.42ID:iNuWULI+ >>206 が必死にググって見つけて来た関係ありそうな(でも全く頓珍漢な)言葉 → ハードセマフォ
自爆志願者かよ w
自爆志願者かよ w
208デフォルトの名無しさん
2018/08/23(木) 19:59:05.89ID:k97Awv43 >>196自体がとんちんかんなわけだがwww
209デフォルトの名無しさん
2018/08/23(木) 19:59:23.06ID:EgEtgRif な、ここのスレは読解力が乏しいのにお互いにマウント取り合って傍から見たらアホちゃうのって奴が多いだろ?
よくもまあLOCK/UNLOCK如きで生産性のカケラもない議論できるわ。
よほど暇なんかな?
よくもまあLOCK/UNLOCK如きで生産性のカケラもない議論できるわ。
よほど暇なんかな?
210デフォルトの名無しさん
2018/08/23(木) 20:01:59.92ID:k97Awv43 LOCK/UNLOCKごとき
だよねえ
だよねえ
211デフォルトの名無しさん
2018/08/23(木) 20:17:25.18ID:e3M4pNLl ハードセマフォってなに…?
212デフォルトの名無しさん
2018/08/23(木) 20:24:14.60ID:k97Awv43 ハードウェアセマフォ
213デフォルトの名無しさん
2018/08/23(木) 20:25:47.93ID:HinwMmX/ C言語のはなしに戻ってくるのはあと何日先かな
214デフォルトの名無しさん
2018/08/23(木) 20:27:03.48ID:k97Awv43 話題があれば
215デフォルトの名無しさん
2018/08/23(木) 20:28:12.68ID:EgEtgRif 初心者でもベテランでも新しい気付きがあるような内容に早く戻るといいね。
216デフォルトの名無しさん
2018/08/23(木) 20:49:36.75ID:EgEtgRif 400メートルなら連続で泳げるけど、800メートルはよほどペース落とさないと無理だわ。
217デフォルトの名無しさん
2018/08/23(木) 20:49:53.03ID:EgEtgRif あ、ごめんなさい。
誤爆しましたm(_ _)m
誤爆しましたm(_ _)m
218デフォルトの名無しさん
2018/08/23(木) 20:50:49.19ID:Uo7RxZ0m 400も800も違わんだろう
219デフォルトの名無しさん
2018/08/23(木) 21:08:53.97ID:wxGNRrqx 違うだろ
220デフォルトの名無しさん
2018/08/23(木) 21:13:49.03ID:ZsFwDbjK >>200
客「(コイツらには二度と仕事頼まんとこ、無能すぎ)」
客「(コイツらには二度と仕事頼まんとこ、無能すぎ)」
221デフォルトの名無しさん
2018/08/23(木) 21:41:28.27ID:OJr5a4rA222デフォルトの名無しさん
2018/08/23(木) 22:03:27.73ID:ZsGoqTtC223デフォルトの名無しさん
2018/08/23(木) 22:13:17.45ID:y9Wx8uZn >>176
> 視点移動が増える書き方で、可読性やメンテナンス性が悪いという人もいる。
それは正しく分割出来てないから。(同じ抽象度で分割する)
読まなくても分かる名前を付けて、結果的に読まないから、視点移動はしない。例えば、以下。
while (1) {
int idx = get_data_idx();
if (idx<0) break;
int* data = prepare_data(idx);
calculate_data(data);
write_back_data(data, idx);
}
この部分はマルチスレッドでのデータ処理だとしよう。
get_data_idxは未演算のデータのインデックスを返し、ない場合は、-1を返すとしよう。
単純に、「インデックスを受け取り、チェックし、データを用意して演算して書き戻す」と読めるだろ。
そこでget_data_idxの中身を見ると、マルチスレッド用だからロックされてる、というだけ。
(余談だが>>107にはこういう具体性が見えないので、
> LOCK/UNLOCKが必要な具体的な場面を想定しての発言には見えない (>>122)
と言われている。これも当たっている)
「視点移動ガー」は読み方を間違っている。
プログラムが階層構造のツリーとして、
縦に掘るのではなく、横に読んで、必要であればその部分だけ縦に読むんだよ。
まず最初は同階層で全体の流れを把握して、必要であればその実装を読む。
実装を読む場合、名前と実装が一致しているかだけのチェックしかしない。
家を建てるとして、
全ての柱が設計図通りに組み上げられているか(全体のチェック)と、
それぞれの柱が設計図通りの仕上がりになってるか(ほぞ穴が正しく加工されてるか)は別にチェックするだろ。
プログラミングも同じで、上位と下位は別にチェックするんだよ。
同時に読まないからいちいち子関数に視点移動なんてしないし、視点移動しなくて済むように同抽象度で分割するんだよ。
> 視点移動が増える書き方で、可読性やメンテナンス性が悪いという人もいる。
それは正しく分割出来てないから。(同じ抽象度で分割する)
読まなくても分かる名前を付けて、結果的に読まないから、視点移動はしない。例えば、以下。
while (1) {
int idx = get_data_idx();
if (idx<0) break;
int* data = prepare_data(idx);
calculate_data(data);
write_back_data(data, idx);
}
この部分はマルチスレッドでのデータ処理だとしよう。
get_data_idxは未演算のデータのインデックスを返し、ない場合は、-1を返すとしよう。
単純に、「インデックスを受け取り、チェックし、データを用意して演算して書き戻す」と読めるだろ。
そこでget_data_idxの中身を見ると、マルチスレッド用だからロックされてる、というだけ。
(余談だが>>107にはこういう具体性が見えないので、
> LOCK/UNLOCKが必要な具体的な場面を想定しての発言には見えない (>>122)
と言われている。これも当たっている)
「視点移動ガー」は読み方を間違っている。
プログラムが階層構造のツリーとして、
縦に掘るのではなく、横に読んで、必要であればその部分だけ縦に読むんだよ。
まず最初は同階層で全体の流れを把握して、必要であればその実装を読む。
実装を読む場合、名前と実装が一致しているかだけのチェックしかしない。
家を建てるとして、
全ての柱が設計図通りに組み上げられているか(全体のチェック)と、
それぞれの柱が設計図通りの仕上がりになってるか(ほぞ穴が正しく加工されてるか)は別にチェックするだろ。
プログラミングも同じで、上位と下位は別にチェックするんだよ。
同時に読まないからいちいち子関数に視点移動なんてしないし、視点移動しなくて済むように同抽象度で分割するんだよ。
224デフォルトの名無しさん
2018/08/23(木) 22:16:11.26ID:y9Wx8uZn >>177
> do while のが軽い場合がある
> って常識だと思ったが
それはお前が何も知らない初心者だから。
do while は初回のチェックが入らない分速い。(逆に言えば、その分だけしか速くない)
君は「なんだか知らないが do-while は速いんだ!」位の理解しかしてないだろ。
そんな馬鹿はC界隈にはいない。
問題は、この「初回チェックしない分速い」のをいちいち取り上げる必要があるか、という点で、
殆どの場合はどうでもいいから do-while は使われない。
ただし、どうしてもケチりたい場合は使われる。
(ルール等で駄目なら手動で初回部分だけインライン展開しても同じだが、それよりは do-while 使った方がいい)
禁止する必要はないけど、使う局面もない、といったところだと思うよ。
初回のチェックが必要ない=その前か上位で初回チェックが必要ないことを保証している、であって、
全くチェックしていないわけではないんだよ。
結果、処理を整理して集約していくと、while文に吸収されることもある。
或いはそうならないとして、ど頭でチェックだけして不要ならショートカットしたい等の場合、
別にチェック+ do-while になるが、それはメトリックスを増やしてしまう。(静的コールグラフ)
どのパスを通るかがデータ依存になり、それがかなり大きな区画になってしまうだろ。
それよりはショートカット出来ないけどどんなデータでも同じパス、
whileで弾かれて空振りするだけ、のほうがメンテナンスが遙かに楽なんだよ。
ここら辺はさんざんメンテナンスしてれば分かるようになるし、してないうちには分からない。
お前は相当それ以前だが。
「僕はdo-whileの方が速いケースもあるのを知ってるんだ!」ってのは痛いだけだから止めとけ。
自分でアホだと言っているようなものだ。
そんなことはみんな知ってて、その上で議論している。
コード分岐を増やすのが、1回のチェックを端折るのと釣り合うか?なんだよ。
> do while のが軽い場合がある
> って常識だと思ったが
それはお前が何も知らない初心者だから。
do while は初回のチェックが入らない分速い。(逆に言えば、その分だけしか速くない)
君は「なんだか知らないが do-while は速いんだ!」位の理解しかしてないだろ。
そんな馬鹿はC界隈にはいない。
問題は、この「初回チェックしない分速い」のをいちいち取り上げる必要があるか、という点で、
殆どの場合はどうでもいいから do-while は使われない。
ただし、どうしてもケチりたい場合は使われる。
(ルール等で駄目なら手動で初回部分だけインライン展開しても同じだが、それよりは do-while 使った方がいい)
禁止する必要はないけど、使う局面もない、といったところだと思うよ。
初回のチェックが必要ない=その前か上位で初回チェックが必要ないことを保証している、であって、
全くチェックしていないわけではないんだよ。
結果、処理を整理して集約していくと、while文に吸収されることもある。
或いはそうならないとして、ど頭でチェックだけして不要ならショートカットしたい等の場合、
別にチェック+ do-while になるが、それはメトリックスを増やしてしまう。(静的コールグラフ)
どのパスを通るかがデータ依存になり、それがかなり大きな区画になってしまうだろ。
それよりはショートカット出来ないけどどんなデータでも同じパス、
whileで弾かれて空振りするだけ、のほうがメンテナンスが遙かに楽なんだよ。
ここら辺はさんざんメンテナンスしてれば分かるようになるし、してないうちには分からない。
お前は相当それ以前だが。
「僕はdo-whileの方が速いケースもあるのを知ってるんだ!」ってのは痛いだけだから止めとけ。
自分でアホだと言っているようなものだ。
そんなことはみんな知ってて、その上で議論している。
コード分岐を増やすのが、1回のチェックを端折るのと釣り合うか?なんだよ。
225デフォルトの名無しさん
2018/08/23(木) 22:18:42.67ID:wxGNRrqx 長文から悔しさがにじみ出てますよ
226デフォルトの名無しさん
2018/08/23(木) 22:19:37.23ID:ZsGoqTtC 成功するまでリトライみたいなのってdo-while使わない?
227デフォルトの名無しさん
2018/08/23(木) 22:20:37.13ID:wxGNRrqx do {
} while (0);
こんなのもごくたまに
} while (0);
こんなのもごくたまに
228さまよえる蟻人間 ◆T6xkBnTXz7B0
2018/08/23(木) 22:22:18.83ID:Z2Fii0dD do-whileはマクロで文をまとめるのによく使うよ。
229デフォルトの名無しさん
2018/08/23(木) 22:23:48.32ID:wxGNRrqx >>227のセミコロンを取ったヤツ
230デフォルトの名無しさん
2018/08/23(木) 22:26:06.91ID:y9Wx8uZn ただマジで、初心者はこの手の話に首を突っ込まない方がいい。
時間の無駄で、上達を阻害するだけ。
コードの美しさ/抽象レベル/分割/隠蔽/疎結合が必要なのは少なくとも200-1000行程度であって、
50行程度ならグダグダ言わずにベタで密結合で書き下した方が分かりやすい。
10行のプログラムを動かすにも苦労する初心者にも、
理解に少なくとも200行程度書ける腕前が必要な内容を教えるから空回りする。
(とはいえ、初段階の洗脳は必要悪だ、というのがJava教団であるが。
そしてFizzBuzzはイテレートするクラス、判定クラス、表示クラスに分割され、
イテレータがインタフェースとして活用される、というのが件の悪ノリだった)
1000行程度も書けない初心者は、まず1000行書けることを目指せ。(1000行程度なら勢いで書ける)
コードの美しさその他はその辺になればだんだん分かってくる。
その後に、自分で「コードを減らす」練習をした方がいい。
(コードを「書く」よりも「減らす」方が上達する、と言う奴は居て、俺もそう思う)
それまでは自分でコーディングルールの優劣を判定する頭もないのだから、(これはちゃんと認めた方がいい)
オレオレルールではなくて、コードを書いている連中のルールをそのまま使った方がいい。
俺はgoogleがいいと思うが。
(なお意識高い系C++erはgoogleのルールはもう古い!と言いだした模様。
俺は布教用のルールなんてゴミだと思っているが、まだチェックはしてない)
>>180-181
MISRAは「自分でどのルールが無駄か判断出来る人向け」であって、
お前らみたいな「自分では判断出来ない初心者向け」ではないんだよ。
素直にとりあえずgoogle使っとけ。
時間の無駄で、上達を阻害するだけ。
コードの美しさ/抽象レベル/分割/隠蔽/疎結合が必要なのは少なくとも200-1000行程度であって、
50行程度ならグダグダ言わずにベタで密結合で書き下した方が分かりやすい。
10行のプログラムを動かすにも苦労する初心者にも、
理解に少なくとも200行程度書ける腕前が必要な内容を教えるから空回りする。
(とはいえ、初段階の洗脳は必要悪だ、というのがJava教団であるが。
そしてFizzBuzzはイテレートするクラス、判定クラス、表示クラスに分割され、
イテレータがインタフェースとして活用される、というのが件の悪ノリだった)
1000行程度も書けない初心者は、まず1000行書けることを目指せ。(1000行程度なら勢いで書ける)
コードの美しさその他はその辺になればだんだん分かってくる。
その後に、自分で「コードを減らす」練習をした方がいい。
(コードを「書く」よりも「減らす」方が上達する、と言う奴は居て、俺もそう思う)
それまでは自分でコーディングルールの優劣を判定する頭もないのだから、(これはちゃんと認めた方がいい)
オレオレルールではなくて、コードを書いている連中のルールをそのまま使った方がいい。
俺はgoogleがいいと思うが。
(なお意識高い系C++erはgoogleのルールはもう古い!と言いだした模様。
俺は布教用のルールなんてゴミだと思っているが、まだチェックはしてない)
>>180-181
MISRAは「自分でどのルールが無駄か判断出来る人向け」であって、
お前らみたいな「自分では判断出来ない初心者向け」ではないんだよ。
素直にとりあえずgoogle使っとけ。
231デフォルトの名無しさん
2018/08/23(木) 22:27:16.39ID:wxGNRrqx こいつNG
232デフォルトの名無しさん
2018/08/23(木) 22:28:37.43ID:y9Wx8uZn >>184
> 覗かないですむほど関数仕様を単純化すると今度は関数が増えて管理の手間が増える矛盾。
管理の手間は増えないと思うが。
もし増えていると感じるのなら、それはCには階層がないことの弊害だ。
関数内関数が普通に使える状況であれば、
関数切り出しは「処理を纏めて名前を付けただけ」でしかなく、
外部からその関数が呼ばれることが文法的にないことを保証出来るから、手間は増えない。
そしてこの点に、妥協的だが現実的なのは「名前に階層も付けてしまう」だ。
つまり、AAA階層内の関数はAAA_get_data_idx()等にし、
もし仮にAAA_get_data_idx内でさらにローカル関数が必要な場合は、AAA_get_data_idx_BBBにしてしまう、というものだ。
関数名が長くなる点を除いて問題はないし、「grep出来るから便利」 by Linus。
OOPも実質同じで、フルパスで呼ぶなら AAA->get_data_idx->BBB()等、_ が -> に代わるだけだが、
実際はオブジェクトポインタ=途中のポインタだから、obj->BBB()となり、長くならずに済む。
(ただし、grep出来なくなる)
俺もCに階層記述能力がないのは問題だと思っているが、
現実的に分割/疎結合化が必要なのは200-1000行単位であり、
ここは「ファイル」(=モジュール)で分割しろ、というのがCだ。
だから不満ではあるが結果的に何とかなってしまうのも事実で、だからこそCがまだ生きながらえている、というのはある。
それにしても「関数内関数」は欲しいんだけどね。あと、ラムダも。
(gccでは前者は標準、後者はマクロで対応出来るが)
> 覗かないですむほど関数仕様を単純化すると今度は関数が増えて管理の手間が増える矛盾。
管理の手間は増えないと思うが。
もし増えていると感じるのなら、それはCには階層がないことの弊害だ。
関数内関数が普通に使える状況であれば、
関数切り出しは「処理を纏めて名前を付けただけ」でしかなく、
外部からその関数が呼ばれることが文法的にないことを保証出来るから、手間は増えない。
そしてこの点に、妥協的だが現実的なのは「名前に階層も付けてしまう」だ。
つまり、AAA階層内の関数はAAA_get_data_idx()等にし、
もし仮にAAA_get_data_idx内でさらにローカル関数が必要な場合は、AAA_get_data_idx_BBBにしてしまう、というものだ。
関数名が長くなる点を除いて問題はないし、「grep出来るから便利」 by Linus。
OOPも実質同じで、フルパスで呼ぶなら AAA->get_data_idx->BBB()等、_ が -> に代わるだけだが、
実際はオブジェクトポインタ=途中のポインタだから、obj->BBB()となり、長くならずに済む。
(ただし、grep出来なくなる)
俺もCに階層記述能力がないのは問題だと思っているが、
現実的に分割/疎結合化が必要なのは200-1000行単位であり、
ここは「ファイル」(=モジュール)で分割しろ、というのがCだ。
だから不満ではあるが結果的に何とかなってしまうのも事実で、だからこそCがまだ生きながらえている、というのはある。
それにしても「関数内関数」は欲しいんだけどね。あと、ラムダも。
(gccでは前者は標準、後者はマクロで対応出来るが)
233デフォルトの名無しさん
2018/08/23(木) 22:34:14.90ID:za+Z/fW8 >>230
1000業かけるお題を教えてください(。・´_`・。)
1000業かけるお題を教えてください(。・´_`・。)
234デフォルトの名無しさん
2018/08/23(木) 22:35:46.52ID:4VjbPjMt 親切に俺condwaitって書いたのに…
235デフォルトの名無しさん
2018/08/23(木) 22:37:11.87ID:ZsGoqTtC 関数のレベル感あわせるのむずい
あわないだろ
あわないだろ
236デフォルトの名無しさん
2018/08/23(木) 22:49:21.25ID:OJr5a4rA237デフォルトの名無しさん
2018/08/23(木) 22:50:32.61ID:/xlV6A++ 現在通過中
風はそれほどでも無いが雨量がヤバい、尋常じゃない
風はそれほどでも無いが雨量がヤバい、尋常じゃない
238デフォルトの名無しさん
2018/08/23(木) 22:50:52.78ID:/xlV6A++ 誤爆した
239デフォルトの名無しさん
2018/08/23(木) 22:50:52.87ID:wxGNRrqx 「軽い場合がある」
240デフォルトの名無しさん
2018/08/23(木) 22:52:49.79ID:wxGNRrqx デメリットは数文字ソースコードが増えるだけ
生成されるバイナリが悪くなることは無い
良くなる可能性はある
生成されるバイナリが悪くなることは無い
良くなる可能性はある
241デフォルトの名無しさん
2018/08/23(木) 22:54:11.95ID:qYtPM3Ou242デフォルトの名無しさん
2018/08/23(木) 22:54:57.75ID:wxGNRrqx do while を使わない(使えない)人っているよね
243デフォルトの名無しさん
2018/08/23(木) 22:57:34.92ID:wxGNRrqx 常に正しく分割されてるコードしかいじらないわけでも無いだろうし
常に正しく分割出来るとも限らないし
正しいか正しくないかは視点によっても違う
理想だけ語るだけで実際にコードを組んだ事が無さそうな人がいるようだけど
常に正しく分割出来るとも限らないし
正しいか正しくないかは視点によっても違う
理想だけ語るだけで実際にコードを組んだ事が無さそうな人がいるようだけど
244デフォルトの名無しさん
2018/08/23(木) 23:01:12.83ID:FIun2PeI >>237
気圧申告しないと!
気圧申告しないと!
245デフォルトの名無しさん
2018/08/23(木) 23:01:58.95ID:wCnARv+4 ワッチョイないのに結局レスするんか
246デフォルトの名無しさん
2018/08/23(木) 23:03:30.31ID:NMfUyUL+ >>230
>FizzBuzzはイテレートするクラス、判定クラス、表示クラスに分割され、イテレータがインタフェースとして活用される、というのが件の悪ノリだった
どんなコードになるのでしょうか?一度みてみたいものです…
fizzbuzz はこんなコードを書いたことがあります
https://mevius.5ch.net/test/read.cgi/tech/1434079972/25
https://ideone.com/i8wMea
>FizzBuzzはイテレートするクラス、判定クラス、表示クラスに分割され、イテレータがインタフェースとして活用される、というのが件の悪ノリだった
どんなコードになるのでしょうか?一度みてみたいものです…
fizzbuzz はこんなコードを書いたことがあります
https://mevius.5ch.net/test/read.cgi/tech/1434079972/25
https://ideone.com/i8wMea
247デフォルトの名無しさん
2018/08/23(木) 23:18:47.64ID:y9Wx8uZn >>226
具体例あるか?
それ以前に「成功するまでリトライ」自体がよろしくないが。
>>236
do-whileに対して何か特殊な最適化がかかるという話なら、
俺は知らんから突っ込めない。
が、そうだとしても、それでコードを汚すこと自体が間違いだが。
>>241
そう思うんならそれでいい。
平行線だし、議論しても結果は出ない。
君のコードを見て他の人がどう思うかはそれぞれの自由だ。
俺はこの場合関数に括り出す方を選択する。
同様の連中もここにいるだろ。それだけの話さ。
ただそれ以前に、アトミックなんて最初から関数に括り出されていると思うが。
インラインアセンブラを使う気でなければそもそも無理だし。例えば、以下。
https://msdn.microsoft.com/ja-jp/library/dd78zt0c(v=vs.110).aspx
>>245
あー、8は俺だ。
ワッチョイありで立て直してくれればそっち行くわ。
(俺が立て直してもいいが)
具体例あるか?
それ以前に「成功するまでリトライ」自体がよろしくないが。
>>236
do-whileに対して何か特殊な最適化がかかるという話なら、
俺は知らんから突っ込めない。
が、そうだとしても、それでコードを汚すこと自体が間違いだが。
>>241
そう思うんならそれでいい。
平行線だし、議論しても結果は出ない。
君のコードを見て他の人がどう思うかはそれぞれの自由だ。
俺はこの場合関数に括り出す方を選択する。
同様の連中もここにいるだろ。それだけの話さ。
ただそれ以前に、アトミックなんて最初から関数に括り出されていると思うが。
インラインアセンブラを使う気でなければそもそも無理だし。例えば、以下。
https://msdn.microsoft.com/ja-jp/library/dd78zt0c(v=vs.110).aspx
>>245
あー、8は俺だ。
ワッチョイありで立て直してくれればそっち行くわ。
(俺が立て直してもいいが)
248デフォルトの名無しさん
2018/08/23(木) 23:43:58.22ID:y9Wx8uZn >>246
俺の記憶では、「FizzBuzz Implementation in Java」みたいなタイトルでGitHubに在ったはず。(だが出てこない)
★も2000位ついていたと思った。
クレームついて取り下げるとも思えないから、検索順位下げられたんじゃね?
そんなに見たければ自分で探せよ。多分まだそのまま公開してると思うぜ。
俺の記憶では、「FizzBuzz Implementation in Java」みたいなタイトルでGitHubに在ったはず。(だが出てこない)
★も2000位ついていたと思った。
クレームついて取り下げるとも思えないから、検索順位下げられたんじゃね?
そんなに見たければ自分で探せよ。多分まだそのまま公開してると思うぜ。
249デフォルトの名無しさん
2018/08/23(木) 23:45:37.65ID:Ml8TmHvL 1000行書けるお題を教えてください
250デフォルトの名無しさん
2018/08/23(木) 23:49:35.97ID:HinwMmX/ 宿題で出されているの?
251デフォルトの名無しさん
2018/08/23(木) 23:52:07.74ID:NMfUyUL+252デフォルトの名無しさん
2018/08/23(木) 23:55:52.97ID:0/a4zf/K253デフォルトの名無しさん
2018/08/23(木) 23:59:12.07ID:y9Wx8uZn254デフォルトの名無しさん
2018/08/24(金) 00:05:09.13ID:iMeaBiRp >>247
> ただそれ以前に、アトミックなんて最初から関数に括り出されていると思うが。
そうだな。すでに atomic 実装されていたら俺も使うわ。
関わっているプロジェクトや文化にも依存するから、絶対はない。
例えば Kernel とかだと大半は関数化していない。俺は見た記憶がない。
まあそれだけの話。
> ただそれ以前に、アトミックなんて最初から関数に括り出されていると思うが。
そうだな。すでに atomic 実装されていたら俺も使うわ。
関わっているプロジェクトや文化にも依存するから、絶対はない。
例えば Kernel とかだと大半は関数化していない。俺は見た記憶がない。
まあそれだけの話。
255デフォルトの名無しさん
2018/08/24(金) 00:16:45.53ID:O3WQJa8X >>254
> 例えば Kernel とかだと大半は関数化していない。俺は見た記憶がない。
それソース出せるか?さすがに嘘だと思うぜ。
> C 言語ではアトミック操作を保証できないことから、Linux は基礎となるアーキテクチャーに依存してアトミック操作を提供します。
> https://www.ibm.com/developerworks/jp/linux/library/l-linux-synchronization.html
いちいちインラインアセンブラでは設計効率が悪すぎる。
APIにも当然用意されてるし、普通の人ならそれを使うし、Linusも当然そうだと思うけど。
根本的に「ロック」自体を勘違いしている気がするが。
> 例えば Kernel とかだと大半は関数化していない。俺は見た記憶がない。
それソース出せるか?さすがに嘘だと思うぜ。
> C 言語ではアトミック操作を保証できないことから、Linux は基礎となるアーキテクチャーに依存してアトミック操作を提供します。
> https://www.ibm.com/developerworks/jp/linux/library/l-linux-synchronization.html
いちいちインラインアセンブラでは設計効率が悪すぎる。
APIにも当然用意されてるし、普通の人ならそれを使うし、Linusも当然そうだと思うけど。
根本的に「ロック」自体を勘違いしている気がするが。
256デフォルトの名無しさん
2018/08/24(金) 00:18:45.88ID:iMeaBiRp >>255
俺は見たことがないだけ。気になったら探してくれ。
俺は見たことがないだけ。気になったら探してくれ。
257デフォルトの名無しさん
2018/08/24(金) 00:34:08.73ID:O3WQJa8X >>256
grepすれば出てきそうだが探す気はない。
linux kernel内でひたすらインラインされているとしたら、
おそらくスタック容量(1スレ当たり256バイトだったか?)の為だろう。
「関数化」はされていなくても「マクロ化」されていて、
ソースコード的には意味が同じという落ちじゃないか?
それなら君の噛みつき方は悪質だと思うがね。(意図的に議論を空回りさせててる)
grepすれば出てきそうだが探す気はない。
linux kernel内でひたすらインラインされているとしたら、
おそらくスタック容量(1スレ当たり256バイトだったか?)の為だろう。
「関数化」はされていなくても「マクロ化」されていて、
ソースコード的には意味が同じという落ちじゃないか?
それなら君の噛みつき方は悪質だと思うがね。(意図的に議論を空回りさせててる)
258デフォルトの名無しさん
2018/08/24(金) 00:37:30.88ID:iMeaBiRp >>257
わざわざ自前で関数化していない、という話だぞ。
わざわざ自前で関数化していない、という話だぞ。
259デフォルトの名無しさん
2018/08/24(金) 00:43:06.32ID:O3WQJa8X260デフォルトの名無しさん
2018/08/24(金) 00:44:16.19ID:iMeaBiRp261デフォルトの名無しさん
2018/08/24(金) 00:49:47.27ID:VJLc5wt0 ソースを示して、突っ込んだ話になることを期待w
262デフォルトの名無しさん
2018/08/24(金) 00:53:41.22ID:ljcg8c0k wktk
263デフォルトの名無しさん
2018/08/24(金) 00:53:57.99ID:TjDOkMEc そしてまた質問者が置き去りになるのであった
264デフォルトの名無しさん
2018/08/24(金) 01:26:32.42ID:VJLc5wt0 C言語なら俺に聞け(答えるとは言っていない)ですか?
265デフォルトの名無しさん
2018/08/24(金) 01:28:36.02ID:A5L5xSI8 >>253
「github にある」が重要なヒントとなりました
「github にある」が重要なヒントとなりました
266デフォルトの名無しさん
2018/08/24(金) 05:28:07.79ID:Nyovr5Qp267デフォルトの名無しさん
2018/08/24(金) 05:50:10.13ID:Nyovr5Qp268デフォルトの名無しさん
2018/08/24(金) 05:54:34.00ID:Nyovr5Qp269デフォルトの名無しさん
2018/08/24(金) 07:43:07.97ID:ZkSPfVdV270デフォルトの名無しさん
2018/08/24(金) 07:52:13.74ID:ZkSPfVdV >>266
> ただ今どきパフォーマンスがいいからdo〜whileにすると言うのはナンセンス
forやwhileを選ぶ理由がある所でも
パフォーマンスを気にしてdo whileを選ぶべき
なんて話はしていない
どれを選んでも良いときに
forを選ぶ人、whileを選ぶ人、do whileを選ぶ人がいると言うだけ
> ただ今どきパフォーマンスがいいからdo〜whileにすると言うのはナンセンス
forやwhileを選ぶ理由がある所でも
パフォーマンスを気にしてdo whileを選ぶべき
なんて話はしていない
どれを選んでも良いときに
forを選ぶ人、whileを選ぶ人、do whileを選ぶ人がいると言うだけ
271デフォルトの名無しさん
2018/08/24(金) 07:57:40.75ID:ZkSPfVdV わざわざCを使うってことは
8bitのチープなマイコン、チープなコンパイラだったり
OSやドライバの開発だったり
アセンブラも混ぜて使うこともありそうな
一番低級な高級言語
他の言語よりも記述方法によるパフォーマンスの差
が語られても良いと思う
8bitのチープなマイコン、チープなコンパイラだったり
OSやドライバの開発だったり
アセンブラも混ぜて使うこともありそうな
一番低級な高級言語
他の言語よりも記述方法によるパフォーマンスの差
が語られても良いと思う
272デフォルトの名無しさん
2018/08/24(金) 07:58:09.19ID:KrjEv78J 自己防衛のためだけのレスになってきたな
そろそろこの話題も終わりかな
そろそろこの話題も終わりかな
273デフォルトの名無しさん
2018/08/24(金) 08:00:01.51ID:Hnd+Ihtp ソース見て do {...} while (1); で無限ループになってたら
さすがに「なんで for (;;) や while (1) にせんの?」と尋ねるわ。
…でも「ループ先頭の(決して成立しない)終了判定が入らないから速いんだ」
と言われたら受け入れるかも。分かってやってるんだな、という意味で。
実際のところ for (;;) は無論のこと while (1) でも判定しないと思うけど。
さすがに「なんで for (;;) や while (1) にせんの?」と尋ねるわ。
…でも「ループ先頭の(決して成立しない)終了判定が入らないから速いんだ」
と言われたら受け入れるかも。分かってやってるんだな、という意味で。
実際のところ for (;;) は無論のこと while (1) でも判定しないと思うけど。
274デフォルトの名無しさん
2018/08/24(金) 08:06:02.46ID:ZkSPfVdV275デフォルトの名無しさん
2018/08/24(金) 08:10:04.46ID:29l6jjMs そういやループの話でgoto使うってレスないな
ネストが浅くなるし好んで使う人は・・・さすがに居ないか
ネストが浅くなるし好んで使う人は・・・さすがに居ないか
276デフォルトの名無しさん
2018/08/24(金) 08:12:56.91ID:LUWnMn3S 無限ループって怖くね?
277デフォルトの名無しさん
2018/08/24(金) 08:14:01.23ID:LUWnMn3S >>274
K&R以来の伝統のCのイディオムだから?
K&R以来の伝統のCのイディオムだから?
278デフォルトの名無しさん
2018/08/24(金) 08:16:04.10ID:ZkSPfVdV goto label2
label1:
処理
label2:
条件判断
if (偽) goto label 1;
----
コンパイル結果的にはforやwhileはこんな感じ
条件が無かったとしても goto label2が入る
最適化しない場合やチープなコンパイラだと
このまま最適化されないかもしれない
goto label2
が不要な時にこれを除いたのがdo while
これのほうがバイナリはシンプル
label1:
処理
label2:
条件判断
if (偽) goto label 1;
----
コンパイル結果的にはforやwhileはこんな感じ
条件が無かったとしても goto label2が入る
最適化しない場合やチープなコンパイラだと
このまま最適化されないかもしれない
goto label2
が不要な時にこれを除いたのがdo while
これのほうがバイナリはシンプル
279デフォルトの名無しさん
2018/08/24(金) 08:18:32.35ID:ZkSPfVdV280デフォルトの名無しさん
2018/08/24(金) 08:18:56.33ID:ZkSPfVdV281デフォルトの名無しさん
2018/08/24(金) 08:30:42.38ID:ZkSPfVdV gotoを使わない(使えない)人だと
多重ループから抜ける為だけにフラグを使ったり
多重ループから抜ける目的の為だけの理由で
関連する複数のループを分けたりする
double data[4][4];
例えばこんな構造のデータのある統計情報を返す関数
ただし、データに非有限値が入っていたらNaNを返す
デバッグ用に計算結果を出力するコードが入っている
どういうコードにする?
多重ループから抜ける為だけにフラグを使ったり
多重ループから抜ける目的の為だけの理由で
関連する複数のループを分けたりする
double data[4][4];
例えばこんな構造のデータのある統計情報を返す関数
ただし、データに非有限値が入っていたらNaNを返す
デバッグ用に計算結果を出力するコードが入っている
どういうコードにする?
282デフォルトの名無しさん
2018/08/24(金) 08:42:44.31ID:srP6ovAZ283デフォルトの名無しさん
2018/08/24(金) 09:30:50.97ID:L5DguHRe マウント取りたくて必死w
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★6 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 【野球】野球の未来に危機感「マイナースポーツになる」 宮本慎也氏が開催…学童大会 [尺アジ★]
- 中国「捜索レーダー起動は各国の通常の手法」 火器管制用か回答せず [蚤の市★]
- 【訃報】声優・西村知道さん死去 「SLAM DUNK」安西先生役 9月に体調不良のため一時休業 [少考さん★]
- 三角形はカッコいい
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- みなみけ三姉妹誰が一番好き?
- 俺はヤンキーだから
- 【速報】高市早苗、起床 [779938112]
- ぬるぽ
