トップページ⇒tech
709コメント230KB

コーディングスタイルにこだわるスレ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/10/28(日) 15:59:01
コーディングスタイルについて熱く語れ
0659デフォルトの名無しさん2011/02/07(月) 09:11:44
>>657
> スマートポインタを使えない状況も考慮すると、NULL埋めを徹底させた方がいい気もするなぁ

どんな状況だ?
最低でも std::auto_ptr は使えるだろ。
0660デフォルトの名無しさん2011/02/07(月) 10:28:07
馬鹿なプログラマがスマポ使えないんだお。
0661デフォルトの名無しさん2011/02/07(月) 11:28:21
スマポが必要になったことが無い。俺が馬鹿だからだろうか。
0662デフォルトの名無しさん2011/02/07(月) 11:37:22
>>661 そのとおりか、あるいは経験不足か、あるいは経験過多です。
0663デフォルトの名無しさん2011/02/07(月) 11:42:21
つまり、明日は晴天だけど時々曇りで場合によっては雨ということですね
0664デフォルトの名無しさん2011/02/07(月) 11:47:12
>>659
組み込み系やデバイスドライバ開発だと
スマポが使えない/使わないケースがよくあるよ
場合によってはC++ NGでCだけでの開発を求められたりとか
0665デフォルトの名無しさん2011/02/07(月) 11:50:40
>>664
それ、技術的な制約でそうなるの?(だとしたらどんな制約?)
それとも決定権のある人が無理解なだけなの?
0666デフォルトの名無しさん2011/02/07(月) 12:25:09
>>665
OSが提供する安全なユーザ空間の上でしかプログラムを組んだ事の無い
アプリ屋さんだと、ちょっと想像しにくいと世界だと思う
そういうもんなんだよとしか言えないし面倒なんで詳しい説明はしない
OSの構造や設計法あるいはリアルタイムOSの解説など
ネットで調べるなり本を読むなり該当スレへ質問するなり自分で考えてくれ
0667デフォルトの名無しさん2011/02/07(月) 12:32:07
>>666
いや、俺は組み込み屋なんだが。
幸いにして関わったプロジェクトでは C++ コンパイラが使えたんで、
何の問題も無く使えている(ような気がする?)。
もちろん OS のある環境とまったく同じというわけにはいかないけど、
少なくともスマートポインタを使わない理由は無い。現に使えている。

なんだろうな?
まぁもうちょっと調べてみるよ。
0668デフォルトの名無しさん2011/02/07(月) 12:39:41
スマートポインタは何を解決してくるの?
deleteの書き忘れ?
deleteを書き忘れちゃうようなコードを書く人のためのもの?
0669デフォルトの名無しさん2011/02/07(月) 13:33:50
しょぼい組み込みだとコンパイラがないとか
コンパイラの信頼性とか、そういう世界なのかな。
0670デフォルトの名無しさん2011/02/07(月) 14:26:40
>>668
マーフィーの法則によるとdeleteを書き忘れない人は存在しない
0671デフォルトの名無しさん2011/02/07(月) 14:35:02
()や{}を書く時セットで両方記入しておいて、
カーソル移動して中身を後から書いてる。
同様に、new書いたらdeleteを直後に書く。

直後じゃなかったとしても、生成と破棄はセットで設計してるから大丈夫。
対になるものはいつも対応を取りながら進めていく。
0672デフォルトの名無しさん2011/02/07(月) 14:57:55
>>667
ちなみにターゲットマシンのCPUは何でございましたでしょうか?
0673デフォルトの名無しさん2011/02/07(月) 17:30:18
>>671
だからそれを人力でやってるのが駄目なんだっつーの。
そりゃ普通そう書くよ。
0674デフォルトの名無しさん2011/02/07(月) 23:04:20
>671
変なフレームワークや仕様を強要されてる場合、newとdeleteを
別々のクラス/関数/スレッド/etcで実行せざるを得なかったりして
必ずしも1対1にできるとは限らないと思う。
0675デフォルトの名無しさん2011/02/07(月) 23:29:24
>>671
そのやりかただと return や例外やその他いろいろ破綻する可能性が残る。

>>668 スマートポインタはこういった問題を防ぐためにある。
0676デフォルトの名無しさん2011/02/07(月) 23:31:54
>>672
ARM7,9,11 と PowerPC 系が少し。
0677デフォルトの名無しさん2011/02/08(火) 01:00:25
> newとdeleteを別々のクラス/関数/スレッド/etcで実行せざるを得なかったりして

そういうときはまず設計を改めたいものだ。
生成期間の管理があやふやになってスマポに頼るような時、
すでに半分棺桶に体突っ込んでるようなもの。どの道破綻する。
0678デフォルトの名無しさん2011/02/08(火) 01:23:28
>>676
ゲーム? のはずないか。
そのあたりは c++ いけるしな。
0679デフォルトの名無しさん2011/02/08(火) 07:58:22
>>677
> そういうときはまず設計を改めたいものだ。
メッセージ作って他のスレッドに投げてそのスレッドがさらにまた…
ってな事はしないのか?
0680デフォルトの名無しさん2011/02/08(火) 14:14:39
スマポが嫌われるのは、多分
・どれを weak_ptr にするかでどうせ後々面倒が起こって、それじゃ delete 忘れ修正の手間と大差ない
・余分なメモリアロケーションが発生するのが嫌だ
のどちらかが大きいのではなかろうか。

参照カウンタではなくリンクリストで実装された侵入型ならどちらも回避できる。
が、リンクリストでの実装は参照カウンタに比べて遅いのだとか。


スマポが delete 忘れを解決するというが、たとえばコンストラクタで new したものを
delete する程度なら、調査追跡も楽だから、スワポなんて無くていい。

スワポがあると助かるのは、例えば、寿命の管理が面倒な場合など。
例えば、何らかのキューにオブジェクトを突っ込む必要があるような場合、突っ込んだ
側にとってはもう不要だが、キューから取り出す側はまだ delete されると困る、という
ような場合。

他には例えば、 Factory メソッドで生成するとか、new するオブジェクトと delete する
オブジェクトが違う場合などは、delete 忘れの追跡が面倒になることもあるから、スワポ
が便利。

スワポが必要になる状況が無いとか、ハンドルとかのスワポ以外の対策があるなら、
別に無理に使う必要は無い。


>>679
俺はスマポ反対ではないが、そういうときにリソースをやりとりして
誰の持ち物か分からなくなるようなのは行儀悪すぎるだろう。
0681デフォルトの名無しさん2011/02/08(火) 14:32:50
>>680
> ・どれを weak_ptr にするかでどうせ後々面倒が起こって、それじゃ delete 忘れ修正の手間と大差ない
> ・余分なメモリアロケーションが発生するのが嫌だ

なら std::auto_ptr や boost::scoped_ptr を使わない理由は無いな。

> スマポが delete 忘れを解決するというが、たとえばコンストラクタで new したものを
> delete する程度なら、調査追跡も楽だから、スワポなんて無くていい。

そのやりかただと代入やコピーコンストラクタや例外やその他いろいろ破綻する可能性が残る。

> スワポがあると助かるのは、例えば、寿命の管理が面倒な場合など。

スワポってなぁに?

> 俺はスマポ反対ではないが、そういうときにリソースをやりとりして
> 誰の持ち物か分からなくなるようなのは行儀悪すぎるだろう。

boost::scoped_ptr なら移動不可能な単一所有権。
std::auto_ptr (std::uniqe_ptr) なら移動可能な単一所有権。
boost::shared_ptr なら共有される所有権。

単一所有権なら誰の持ち物かは明白。
共有される所有権が誰の持ち物か分からなくなるのは、まぁ当然だよね。
0682デフォルトの名無しさん2011/02/08(火) 14:33:54
s/std::uniqe_ptr/std::unique_ptr/
0683デフォルトの名無しさん2011/02/08(火) 15:16:56
> 他には例えば、 Factory メソッドで生成するとか

createみたいなメソッドはもう格上げして、
使う側からしたら (new, create) <--> delete
という扱いにすればその心配はないかも。

deleteの追跡とやらは、createを呼び出した側での話しになる。
0684デフォルトの名無しさん2011/02/08(火) 21:24:29
>>658
> なんせ未だにカラム制限のあるコーディング規約もあるくらいだ。
Linux カーネルとか *BSD とか Solaris とかのの話か?
06856802011/02/08(火) 23:55:19
>>681
> なら std::auto_ptr や boost::scoped_ptr を使わない理由は無いな。
scoped_ptr の類まで嫌う人たちがいるのかな?

> スワポってなぁに?
市況2板を見た後だったので FX 脳になってた。
0686デフォルトの名無しさん2011/02/09(水) 00:31:41
>>684
んにゃ、某大手家電メーカーの特定部署。1行80カラム以内で
コメントは(行単位でないなら)41カラムだかどこだかより前に出現してはいけない。
インデントも確か特殊だった記憶がある。
0687デフォルトの名無しさん2011/02/09(水) 10:18:54
あー、そういう環境じゃしょうがないよね。
0688デフォルトの名無しさん2011/02/13(日) 00:26:14
>>686
富士通みたいな所だな。
0689デフォルトの名無しさん2011/02/22(火) 12:38:52.11
某fj2で、携帯作ってるトコなんかだと
自動的にテスト仕様書を生成するために

//: unkがmoreそうな場合はleaveする
 if (iUnk < iMore) {
  User::Leave(EGodBlessYou);
 }

みたいに、「//:」を0カラム目にしてコメントを書け
という規定があるね
0690デフォルトの名無しさん2011/02/27(日) 23:18:33.78
プリプロセスの#includeとかが行頭にないとコンパイラがスルーしたことならあったな。
もう直ったのかshc
0691デフォルトの名無しさん2011/03/02(水) 16:28:45.71
20年くらい前かな
関数名のプリフィックスを2文字、機能単位で3文字、ユニークな部分を3文字に制限された
チームがあった
0692デフォルトの名無しさん2011/03/02(水) 20:36:20.17
うっせーバカ!現在進行形だ!
0693デフォルトの名無しさん2011/03/06(日) 19:22:45.45
今まさに、boostが使えない(or入れるのに手間がかかる)プロジェクトに居るんだが、
std::auto_ptrのみで、このスレで紹介されたような状況を対応する方法はあるのだろうか?
0694デフォルトの名無しさん2011/03/06(日) 19:35:04.41
>>693
コピーしたときの妙な特性さえ把握してれば普通に使える奴だよ std::auto_ptr は。
何が心配なの?
0695デフォルトの名無しさん2011/03/10(木) 22:21:32.27
>>694
すまん、書き方が悪かった。
一番聞きたかったのは、boost::sheard_ptrでないと解決できないような問題は存在する(多いのか)?
大抵の問題はstd::auto_ptrを駆使すれば問題を解決できるのか。

boost::sheard_ptrはboostが使える環境でないと使えない。(あたりまえだけど)
で、組込み系だと使えるライブラリが制限されていることは多いんで、
boostがあれば解決、だと、現実解にならない場面が多いのよ。
0696デフォルトの名無しさん2011/03/11(金) 00:39:48.77
仮に boostがあれば解決だったとして、
boostが使えない環境で boost::sheard_ptr 相当の、
あるいは必要な部分だけの機能を自作することは現実的ではないの?
0697デフォルトの名無しさん2011/03/11(金) 01:27:42.99
>>695
そんなもん、「作るものによる」としか言えないに決まってるじゃねーか。
心配している「状況」を挙げないと。
0698デフォルトの名無しさん2011/03/11(金) 19:06:21.02
>>695
スレ違い。
本を読んで自分で考えろ。その後まだ質問があれば、適切なスレで質問するといい。
0699デフォルトの名無しさん2011/03/20(日) 01:23:32.02
std::auto_ptr はコンテナ(vectorとか)との相性が悪い。
0700デフォルトの名無しさん2011/06/05(日) 05:34:53.68
横に長いソースはやめてください
フルHDのモニタでエディタ全画面表示にしてもラップするって酷いお
0701デフォルトの名無しさん2011/06/05(日) 06:57:16.18
フォントがでかすぎるんじゃねぇの?
0702デフォルトの名無しさん2011/06/06(月) 00:11:56.44
>>701
お前に俺の気持ちは分からない
0703デフォルトの名無しさん2011/06/06(月) 01:25:22.03
しらんがな
0704天使 ◆uL5esZLBSE 2011/07/03(日) 22:33:58.14
2011年、Ruby,Perl,PHP,Pythonって並べたときにさ
ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな


本当にバカだな
0705デフォルトの名無しさん2011/07/03(日) 23:46:31.28
巣に帰れ
0706デフォルトの名無しさん2011/09/17(土) 23:31:20.71
C++のコンストラクタ初期化子のインデントについて

CHoge() : hoge1(0), hoge2(0), hoge3(0), ...

この初期化子を1行1メンバで並べるときインデントはどうしてますか?
VS2008だと半角スペースが2つ入るんだけどMSはそういうスタイルなのかしら
0707デフォルトの名無しさん2011/09/18(日) 00:35:41.14
VS って自動で埋め込まれるインデントの
量(空白3つ分とか)をユーザーが設定することはできないの?
0708デフォルトの名無しさん2011/11/22(火) 12:56:04.40
どうなの?
0709デフォルトの名無しさん2011/11/22(火) 16:45:32.56
>>700
同意だわ。読みづらい。
最近は異常に識別名が長すぎるんだよな。
■ このスレッドは過去ログ倉庫に格納されています