C言語の話題のみ取り扱います。C++の話題はC++スレへ。
上級者専用です。10,000行程度のソースを扱えない人は以下スレへ。
C言語なら俺に聞け
https://mevius.5ch.net/test/read.cgi/tech/1519046038/
適宜以下を使用してください。
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/
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C言語相談室(上級者専用)
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 139f-Cjmv)
2018/03/02(金) 22:48:03.65ID:2Cs+DkMh0420蟻人間 ◆T6xkBnTXz7B0 (ワッチョイ c301-JiLg)
2019/07/04(木) 16:03:16.38ID:5KPM8ZzF0421蟻人間 ◆T6xkBnTXz7B0 (スププ Sd1f-dIxF)
2019/07/04(木) 20:57:20.52ID:FzZdbDF3d ダン。テストにgo!
422デフォルトの名無しさん (アウアウウー Sacf-Im8i)
2020/07/07(火) 19:15:29.77ID:/zFzmDrza gotoキャンペーン
423デフォルトの名無しさん (ワッチョイ 9f7b-uKxv)
2020/08/23(日) 15:49:17.24ID:Y43WfYiq0 お前らこれどう見る?(Cの話ではないが)
> 正しい共通化とは、「同じものを共通化すること」であり「同じようなものを共通化すること」ではない。
https://xtech.nikkei.com/it/atcl/column/17/031300081/041000005/?P=2
俺はこの筆者が間違いだと思うが。
俺は後者も積極的に共通化して、というよりは積極的に「共通ルーチンを使うように」コーディングし、
結果的に「殆ど同じ事をやっているルーチン」の濫造を防いで行数を減らす=コードの規模を抑えることの方が重要だと見ている。
つまり、この失敗ケースで最初に目指した物の方が近い。
「同じ物を共通化する」ではコードは減らない。「ほぼ同じだがちょっと違う」が大量発生してしまう。
だから最初から「同様のルーチンが必要」と分かっていればそれなりに緩く作って汎用性にするし、
当初それが分からない場合は当然「専用(=非汎用)ルーチン」となっているが、
仕様変更で同様の物を追加で書く際に、それと纏めて無理にでも共通化する。
結果的に俺はそれで上手く行っている。(つもり)
なお俺も以前はこの作者と同様、「まず自由(つまり局所最適化)に組んで、その後共通部分を共通化」だった。
ただそれだとコードの依存性はそれぞれ別のルーチンを使うので当然減るのだが、
結果的に「ほぼ同じだがちょっと違う」だけのルーチンがやたら出来て、その後の長期的保守性が著しく落ちる。
というか、長期的保守性って結局のところ、「もう一度読み直すのにかかる時間」でしかないから、
結局は「コードの読みやすさ」*「コードの量」であり、同じようなルーチンが山ほどあるのは悪だと気づいた。
違いはおそらく、開発フロー、つまりウォーターフォールとアジャイルの違い、また、
昔のテスト方式へのこだわり(=一文字でも変更した部分は全部テストやり直し)から来ていると思う。
共通ルーチンがなければ、追加機能で仕様変更した際、追加部分にしか変更が影響しないので当然デグレードの危険は低くなる。
ただしそれだと無駄にコードが膨らんでいくだけで、割と早い段階で破綻すると気づいた。
とはいえ上記の俺の「上手く行っている」ははっきり言ってテストはほぼやってないので、
テストについて問題があるのは事実だが。
> 正しい共通化とは、「同じものを共通化すること」であり「同じようなものを共通化すること」ではない。
https://xtech.nikkei.com/it/atcl/column/17/031300081/041000005/?P=2
俺はこの筆者が間違いだと思うが。
俺は後者も積極的に共通化して、というよりは積極的に「共通ルーチンを使うように」コーディングし、
結果的に「殆ど同じ事をやっているルーチン」の濫造を防いで行数を減らす=コードの規模を抑えることの方が重要だと見ている。
つまり、この失敗ケースで最初に目指した物の方が近い。
「同じ物を共通化する」ではコードは減らない。「ほぼ同じだがちょっと違う」が大量発生してしまう。
だから最初から「同様のルーチンが必要」と分かっていればそれなりに緩く作って汎用性にするし、
当初それが分からない場合は当然「専用(=非汎用)ルーチン」となっているが、
仕様変更で同様の物を追加で書く際に、それと纏めて無理にでも共通化する。
結果的に俺はそれで上手く行っている。(つもり)
なお俺も以前はこの作者と同様、「まず自由(つまり局所最適化)に組んで、その後共通部分を共通化」だった。
ただそれだとコードの依存性はそれぞれ別のルーチンを使うので当然減るのだが、
結果的に「ほぼ同じだがちょっと違う」だけのルーチンがやたら出来て、その後の長期的保守性が著しく落ちる。
というか、長期的保守性って結局のところ、「もう一度読み直すのにかかる時間」でしかないから、
結局は「コードの読みやすさ」*「コードの量」であり、同じようなルーチンが山ほどあるのは悪だと気づいた。
違いはおそらく、開発フロー、つまりウォーターフォールとアジャイルの違い、また、
昔のテスト方式へのこだわり(=一文字でも変更した部分は全部テストやり直し)から来ていると思う。
共通ルーチンがなければ、追加機能で仕様変更した際、追加部分にしか変更が影響しないので当然デグレードの危険は低くなる。
ただしそれだと無駄にコードが膨らんでいくだけで、割と早い段階で破綻すると気づいた。
とはいえ上記の俺の「上手く行っている」ははっきり言ってテストはほぼやってないので、
テストについて問題があるのは事実だが。
424デフォルトの名無しさん (アウウィフ FF63-fHWV)
2020/08/23(日) 15:56:52.71ID:Exm+Pt+ZF コボちゃんの発想だよな
425デフォルトの名無しさん (ラクッペペ MM4f-N8Ih)
2020/08/23(日) 16:23:53.69ID:xPfkrPy6M426デフォルトの名無しさん (ワッチョイ 9f7b-uKxv)
2020/08/23(日) 16:56:04.30ID:Y43WfYiq0 >>424
なるほど、コボラーか。
日本IBMだからVBかと思っていた。
となると当初の「共通化」思想はJava組か?
で、コボラー老害がJavaの若者(というほど若くもないだろうが)を揶揄した記事かな?
これならありがちな状況ではある。
しかし俺が思うに「保守性」の向上なら「共通化」の方が正解で、
「同じ『ような』ものは共通化しない」方針は デグレード回避>>>保守性 の時に取るべき選択であり、
「保守性」向上を目指す際に取るのは間違いだと思う。(保守性は明確に落ちるから)
なるほど、コボラーか。
日本IBMだからVBかと思っていた。
となると当初の「共通化」思想はJava組か?
で、コボラー老害がJavaの若者(というほど若くもないだろうが)を揶揄した記事かな?
これならありがちな状況ではある。
しかし俺が思うに「保守性」の向上なら「共通化」の方が正解で、
「同じ『ような』ものは共通化しない」方針は デグレード回避>>>保守性 の時に取るべき選択であり、
「保守性」向上を目指す際に取るのは間違いだと思う。(保守性は明確に落ちるから)
427デフォルトの名無しさん (アウウィフ FF63-fHWV)
2020/08/23(日) 17:18:21.25ID:Exm+Pt+ZF428デフォルトの名無しさん (ワッチョイ 9f7b-uKxv)
2020/08/23(日) 18:01:07.29ID:Y43WfYiq0 >>427
コピペしてるなw
俺だったらコピペせずに、表示形式とデータ、つまりCでいうprintfレベルの関数を作って共通化、
本体からはまずはそれ(printf)を直接呼ぶ。
ただし本体から呼ぶ箇所が2箇所以上になってしまう場合は、
(=出来るだけ1箇所で済むように纏めるが、それでも2箇所以上になってしまう場合は)
一々フォーマット渡すとそのフォーマット部分をコピペすることになるのがウザイから、ラップ関数を作ってそれを呼ぶ。
この結果、動画でやってるのと上位レベルのコードは同じになるから、動画の方法でもそんなにクリティカルではない。
(後から掃除する時に難しい修正は必要ない。とはいえどうせやるなら最初から綺麗に書いとけ、だが)
まあ、入門用の動画なのだろうからいいのでは?
ただまあ、それ以前に、ゲームエンジンならスコア表示なんて当たり前にやるのだから、
もうちょっとましな方法もあるようにも思うが。Unityは全然知らんけど。
一々自前で書くのではなくて、普通にバインディグ出来ても不思議ではないが。
(そもそもC#ならproperty使えるから自前でバインディングするのも楽勝だが)
コピペしてるなw
俺だったらコピペせずに、表示形式とデータ、つまりCでいうprintfレベルの関数を作って共通化、
本体からはまずはそれ(printf)を直接呼ぶ。
ただし本体から呼ぶ箇所が2箇所以上になってしまう場合は、
(=出来るだけ1箇所で済むように纏めるが、それでも2箇所以上になってしまう場合は)
一々フォーマット渡すとそのフォーマット部分をコピペすることになるのがウザイから、ラップ関数を作ってそれを呼ぶ。
この結果、動画でやってるのと上位レベルのコードは同じになるから、動画の方法でもそんなにクリティカルではない。
(後から掃除する時に難しい修正は必要ない。とはいえどうせやるなら最初から綺麗に書いとけ、だが)
まあ、入門用の動画なのだろうからいいのでは?
ただまあ、それ以前に、ゲームエンジンならスコア表示なんて当たり前にやるのだから、
もうちょっとましな方法もあるようにも思うが。Unityは全然知らんけど。
一々自前で書くのではなくて、普通にバインディグ出来ても不思議ではないが。
(そもそもC#ならproperty使えるから自前でバインディングするのも楽勝だが)
429デフォルトの名無しさん (ワッチョイ ff7c-F02t)
2020/08/24(月) 10:08:27.21ID:5+nAALyq0 現場猫:ヨシ!
監督猫:ヨシ!
検収猫:ヨシ!
監督猫:ヨシ!
検収猫:ヨシ!
430デフォルトの名無しさん (ワッチョイ 1f2c-3Lde)
2020/08/24(月) 10:29:42.31ID:seWRIuQk0 Ruby on Rails が、デザインパターンの宝庫
431デフォルトの名無しさん (ワッチョイ 9f01-IEoI)
2020/08/24(月) 12:57:21.18ID:I647ZAoC0 「同じ」とは、つまりどういうことなのか?
432デフォルトの名無しさん (ワッチョイ d602-lsHo)
2020/09/29(火) 10:27:06.11ID:FBp2gwm40 rect/margin
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- サナエノミクスについて力説 積極的な財政出動で「所得増える 消費マインド上がる 税収増える」片山さつき財務大臣 ★3 [少考さん★]
- 中国軍機のレーダー照射1週間 駆け引き続く 中国、米のレッドライン模索 日本、米以外の同志国とも連携探る 米は対立から距離置く★2 [ぐれ★]
- 鈴木農相「おこめ券はお米しか買えないわけではない。例えば卵、味噌、しょうゆ、こうした購入に利用可能」 ★4 [Hitzeschleier★]
- 【芸能】粗品、日本テレビに苦言 客のレベルが「かなり低い。あいつら分かってない」「拍手したいだけやねん」 [冬月記者★]
- 橋下徹氏「総理なら岡田さんに何を聴かれても耐えてほしかった」 高市首相の台湾有事めぐる答弁に# [jinjin★]
- 「ヒートテックに寿命があります」ユニクロが明かした“3年劣化”の理由 暖かさが落ちる意外な原因とは [ぐれ★]
- お前らもちろんマモンキングやってるよな?
- 助けて!!地元でテレビ番組の超絶美人のアナウンサーさんが退社した。゚(゚´Д`゚)゚。
- 魅音が詩音で詩音が魅音
- (´・ω・`)VIPにおける現在確認している不具合について
- ( ´・ω・` )起きたよ
- 吉田死ね
