探検
コーディングスタイルにこだわるスレ
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2007/10/28(日) 15:59:01 コーディングスタイルについて熱く語れ
573デフォルトの名無しさん
2010/12/29(水) 18:29:41 >>572
コーディング規約にすることで未然に防ぎたい不具合の具体的な例をお願い。
> A.h で struct A の宣言に加えて typedef struct A A があり、関連する関数の宣言に
> struct A* ではなく A* が現れる場合、 A* を使うためには必ず A.h のインクルードが
> 必要になる。
根拠が分からない。
手元の三つのコンパイラでコンパイルでき、警告さえ出さない。
俺が失念している規格があるのかもしれないから、具体的に示してもらえるとありがたい。
> A.h で struct A だけが宣言されていて、使う側で毎度 struct A と書く場合、
> 使う側で A.h をインクルードせずに struct A の前方宣言で済ませることができる。
というわけで、こちらも前方宣言で済ませることができる。
ただし typedef struct A A; の一行が余分に必要になる。
ちなみに C++ なら余分の typedef も不要。
と、ここまで書いてようやく気づいたが、同じ typedef 名の typedef がいけないということか。
typedef struct A A;
typedef struct A { int a; } A;
とあると、後者でエラーになるということか。
ちなみにこれは gcc ではエラーだが、cl と bcc32 ではスルーだった。
もちろん C++ ならどれも ok。
その理由で禁止なら、支持できるが、本当にこんなことを言ってたの?
コーディング規約にすることで未然に防ぎたい不具合の具体的な例をお願い。
> A.h で struct A の宣言に加えて typedef struct A A があり、関連する関数の宣言に
> struct A* ではなく A* が現れる場合、 A* を使うためには必ず A.h のインクルードが
> 必要になる。
根拠が分からない。
手元の三つのコンパイラでコンパイルでき、警告さえ出さない。
俺が失念している規格があるのかもしれないから、具体的に示してもらえるとありがたい。
> A.h で struct A だけが宣言されていて、使う側で毎度 struct A と書く場合、
> 使う側で A.h をインクルードせずに struct A の前方宣言で済ませることができる。
というわけで、こちらも前方宣言で済ませることができる。
ただし typedef struct A A; の一行が余分に必要になる。
ちなみに C++ なら余分の typedef も不要。
と、ここまで書いてようやく気づいたが、同じ typedef 名の typedef がいけないということか。
typedef struct A A;
typedef struct A { int a; } A;
とあると、後者でエラーになるということか。
ちなみにこれは gcc ではエラーだが、cl と bcc32 ではスルーだった。
もちろん C++ ならどれも ok。
その理由で禁止なら、支持できるが、本当にこんなことを言ってたの?
574デフォルトの名無しさん
2010/12/29(水) 18:34:40 >>573
> 手元の三つのコンパイラでコンパイルでき、警告さえ出さない。
どんなコードでテストしてるの?
> というわけで、こちらも前方宣言で済ませることができる。
> ただし typedef struct A A; の一行が余分に必要になる。
...
> typedef struct A A;
> typedef struct A { int a; } A;
> とあると、後者でエラーになるということか。
前方宣言のつもりで複数のヘッダに typedef struct A A; と書いたとしたら、
それらのヘッダをひとつの翻訳単位にインクルードすればやっぱりエラーになるだろ。
> 手元の三つのコンパイラでコンパイルでき、警告さえ出さない。
どんなコードでテストしてるの?
> というわけで、こちらも前方宣言で済ませることができる。
> ただし typedef struct A A; の一行が余分に必要になる。
...
> typedef struct A A;
> typedef struct A { int a; } A;
> とあると、後者でエラーになるということか。
前方宣言のつもりで複数のヘッダに typedef struct A A; と書いたとしたら、
それらのヘッダをひとつの翻訳単位にインクルードすればやっぱりエラーになるだろ。
575デフォルトの名無しさん
2010/12/30(木) 02:33:59 C禁止にしてC++に統合しようぜ。
576デフォルトの名無しさん
2010/12/30(木) 07:16:23 そんな事したらリーナスおじさんが黙っていない
577デフォルトの名無しさん
2010/12/30(木) 11:06:58 俺もOOPは大好きだが、
OOPLとしてのC++にも感謝してるが、
どっちか無くせといわれたら、C++がイランなw
Cは必要だな。
OOPLとしてのC++にも感謝してるが、
どっちか無くせといわれたら、C++がイランなw
Cは必要だな。
578デフォルトの名無しさん
2010/12/30(木) 15:26:15 >>573
> もちろん C++ ならどれも ok。
C++ でも微妙だったりする。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#407
> もちろん C++ ならどれも ok。
C++ でも微妙だったりする。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#407
579デフォルトの名無しさん
2010/12/30(木) 23:31:39 揚げ足取りならC++ならC的な書き方もできるがね。
とはいえ組み込み系だと環境構築してる間に開発期間がなくなる勢いだから
トップダウンでCを減らして欲しい。ボトムアップじゃムリポ。
とはいえ組み込み系だと環境構築してる間に開発期間がなくなる勢いだから
トップダウンでCを減らして欲しい。ボトムアップじゃムリポ。
580デフォルトの名無しさん
2010/12/31(金) 09:26:49581デフォルトの名無しさん
2011/01/01(土) 01:27:35 逆に、constなんかはCよりC++の仕様のほうが組込にも向いているように思う。
自分の知り合いは、テンプレートは使う(もちろんコードサイズ増加は織り込み済み)が、
それよりも動的メモリ確保(malloc/new等)禁止のほうを気にかけている感じだった。
これももちろん分野によるのだろうけど。
自分の知り合いは、テンプレートは使う(もちろんコードサイズ増加は織り込み済み)が、
それよりも動的メモリ確保(malloc/new等)禁止のほうを気にかけている感じだった。
これももちろん分野によるのだろうけど。
582デフォルトの名無しさん
2011/01/01(土) 04:27:25 if文の中に長い関数式を書くのはあまり好みではないので分けて書くことが多いけどどうよ
何をあほな書き方してんだと思うかいな。
if (MessageBox("保存しますか?", "内容が変更されています", MB_YESNO | MB_ICONQUESTION) == IDYES)
文;
----------------------------------------------------
const char * const pc1 = "保存しますか?";
const char * const pc2 = "内容が変更されています";
int num1 = MessageBox(pc1, pc2, utype);
// もしくは
// const LPCTSTR lpctstr1 = "保存しますか?";
// const LPCTSTR lpctstr2 = "内容が変更されています";
// uint utype = MB_YESNO | MB_ICONQUESTION;
// int num1 = MessageBox(lpctstr1, lpctstr2, utype);
int num2 = num1 == IDYES;
if (num2)
文;
何をあほな書き方してんだと思うかいな。
if (MessageBox("保存しますか?", "内容が変更されています", MB_YESNO | MB_ICONQUESTION) == IDYES)
文;
----------------------------------------------------
const char * const pc1 = "保存しますか?";
const char * const pc2 = "内容が変更されています";
int num1 = MessageBox(pc1, pc2, utype);
// もしくは
// const LPCTSTR lpctstr1 = "保存しますか?";
// const LPCTSTR lpctstr2 = "内容が変更されています";
// uint utype = MB_YESNO | MB_ICONQUESTION;
// int num1 = MessageBox(lpctstr1, lpctstr2, utype);
int num2 = num1 == IDYES;
if (num2)
文;
583デフォルトの名無しさん
2011/01/01(土) 11:57:47 え? 折角変数使うのにnum2みたいな糞名前?
そんなんつけるくらいなら
int ret = MessageBox(pc1, pc2, utype);
if (ret == IDYES)
こうするほうがまだマシでは?
else if (ret == IDCANCEL)などと続けられることも考えて。
そんなんつけるくらいなら
int ret = MessageBox(pc1, pc2, utype);
if (ret == IDYES)
こうするほうがまだマシでは?
else if (ret == IDCANCEL)などと続けられることも考えて。
584デフォルトの名無しさん
2011/01/03(月) 13:24:29 >>580
ハード性能の貧弱さで C++ が使えなくなるなんてことはないよ。
例外、 RTTI 、テンプレートとか、機能や具体的な使い方に応じて
費用対効果が見合わないことはあるだろうけどね。
でもそれは組み込みにかかわらずあたりまえの話。
マイナーすぎてコンパイラが無いっていう方向の貧弱さを言ってるんだったら別。
ハード性能の貧弱さで C++ が使えなくなるなんてことはないよ。
例外、 RTTI 、テンプレートとか、機能や具体的な使い方に応じて
費用対効果が見合わないことはあるだろうけどね。
でもそれは組み込みにかかわらずあたりまえの話。
マイナーすぎてコンパイラが無いっていう方向の貧弱さを言ってるんだったら別。
585デフォルトの名無しさん
2011/01/03(月) 14:07:45 >>584 主記憶64kでやってみろよ
586デフォルトの名無しさん
2011/01/03(月) 14:46:28 >>585 別に問題ありませんが何か?
587デフォルトの名無しさん
2011/01/03(月) 22:32:32 >>585
むしろその環境に対して C++ の何が問題を起こすと思っているのか聞きたい。
むしろその環境に対して C++ の何が問題を起こすと思っているのか聞きたい。
588デフォルトの名無しさん
2011/01/11(火) 01:09:09 C++ が問題というよりは、組み込みでテンプレとか
ガンガン使っておいて ROM/RAM 足りませんみたいな
こと言ってくる奴が多すぎて困る。
バグったらバグったで自分じゃ解析できないから
ヘルプミーだと。 C++禁止にしようぜ。
ガンガン使っておいて ROM/RAM 足りませんみたいな
こと言ってくる奴が多すぎて困る。
バグったらバグったで自分じゃ解析できないから
ヘルプミーだと。 C++禁止にしようぜ。
589デフォルトの名無しさん
2011/01/11(火) 23:44:50 テンプレ禁止しろよ
590デフォルトの名無しさん
2011/01/12(水) 10:53:19 テンプレってリソース喰うん?
591デフォルトの名無しさん
2011/01/12(水) 11:49:57 >>590 いいえ
592デフォルトの名無しさん
2011/01/12(水) 12:12:04 リソースを食うコードを書いてしまいやすいと言うべきかな
593デフォルトの名無しさん
2011/01/12(水) 12:22:45 なにこのほほえましいスレ。
594デフォルトの名無しさん
2011/01/12(水) 18:43:10 >>588
禁止というか免許制にすればいいのにとは思う
禁止というか免許制にすればいいのにとは思う
595デフォルトの名無しさん
2011/01/12(水) 20:08:48596デフォルトの名無しさん
2011/01/24(月) 02:34:22 Javaで使い終わった変数にnullセットとか意味あんの?
ゴスリングも、今のGCは賢いからそんなことせんでええと言っているし、
そもそもスタイルとして美しくないので嫌いなんだが。
あと、宣言時のnullセットも同じく。
ここの先輩諸氏はどう思われますか。
ゴスリングも、今のGCは賢いからそんなことせんでええと言っているし、
そもそもスタイルとして美しくないので嫌いなんだが。
あと、宣言時のnullセットも同じく。
ここの先輩諸氏はどう思われますか。
597デフォルトの名無しさん
2011/01/24(月) 03:50:41 宣言時のnullセットは意味が無いな
598デフォルトの名無しさん
2011/01/24(月) 09:14:31 インスタンス変数で、null代入しないとオブジェクトリークになる、
というのでもない限りいらんだろ。
というのでもない限りいらんだろ。
599デフォルトの名無しさん
2011/01/24(月) 09:17:46 GC目的のつもりの代入に限って言えば、
それを強いるなど狂気の沙汰だ。
それを強いるなど狂気の沙汰だ。
600デフォルトの名無しさん
2011/01/24(月) 10:34:58 生存時間の長いローカル変数に対して、時間がかかる処理の前にnull代入するのは意味がないこともないよ
GCの世代昇格を防いだり
GCの世代昇格を防いだり
601デフォルトの名無しさん
2011/01/24(月) 11:02:17 >そもそもスタイルとして美しくないので嫌いなんだが。
なぜそう思う?
なぜそう思う?
602デフォルトの名無しさん
2011/01/24(月) 22:59:59 >>596
VB出身者が必要だと思ってるんだろ。それ。
VB出身者が必要だと思ってるんだろ。それ。
603デフォルトの名無しさん
2011/01/24(月) 23:02:00 使い終わった変数にnullを入れると安全になるって思い込んでるヤツは
よくみるな。
それで安全になるようなコードの書き方をしてるなら、そっちを見直すべき
なんだけど。
よくみるな。
それで安全になるようなコードの書き方をしてるなら、そっちを見直すべき
なんだけど。
604デフォルトの名無しさん
2011/01/29(土) 15:50:46 C++なら新人に多重deleteされないようにdeleteし終わったらNULL入れておくかな。
C++はNULLのdeleteは「何もしない」のが仕様として決まっているから。
無条件deleteでも問題ない話になる。
C++はNULLのdeleteは「何もしない」のが仕様として決まっているから。
無条件deleteでも問題ない話になる。
605デフォルトの名無しさん
2011/01/29(土) 17:09:13 コーディングルールの話をしてて、それはダメだってことになると、
「これはヘタクソには有効だ」って反論がでてくるけど、ヘタクソ向けの
コーディングルールなんていらないよな。
だいたいヘタクソに対しても別に有効じゃねえだろって感じだし。
「これはヘタクソには有効だ」って反論がでてくるけど、ヘタクソ向けの
コーディングルールなんていらないよな。
だいたいヘタクソに対しても別に有効じゃねえだろって感じだし。
606デフォルトの名無しさん
2011/01/29(土) 19:15:53 よう俺。
デメリットを指摘しても「でも僕はこっちの方がいいです。慣れですよ」とか言われるし。
デメリットを指摘しても「でも僕はこっちの方がいいです。慣れですよ」とか言われるし。
607デフォルトの名無しさん
2011/01/29(土) 20:13:55 個人でプログラムしてるのなら、
周りの人間がそいつのコーディングスタイルをどうのこうの言っても意味が無い
好みの問題に他人が口出しするものではない
が、チームを組んでプログラムしてたり、
そいつのソースを将来別の誰かがメンテしたりするのなら、
コーディングスタイルを合わせるよう「命令」しないといけない
デメリットやメリットは無意味で、問答無用で「命令」だ
周りの人間がそいつのコーディングスタイルをどうのこうの言っても意味が無い
好みの問題に他人が口出しするものではない
が、チームを組んでプログラムしてたり、
そいつのソースを将来別の誰かがメンテしたりするのなら、
コーディングスタイルを合わせるよう「命令」しないといけない
デメリットやメリットは無意味で、問答無用で「命令」だ
608デフォルトの名無しさん
2011/01/29(土) 20:37:06 もしかして:スレ違い
609デフォルトの名無しさん
2011/01/29(土) 20:38:07 ヘタクソにコーディングルールを強いると、生産性が落ちてバグが増えそうで怖い。
なのでヘタクソのコーディングルールに合わせるのです。
なのでヘタクソのコーディングルールに合わせるのです。
610デフォルトの名無しさん
2011/01/29(土) 20:54:06 >>609
> 生産性が落ちてバグが増えそうで怖い
見えないものを怖がるな
どのようなヘタクソに、どのようなコーディングルールを強いた場合、
生産性がどれくらい落ちて、バグがどれくらい増えるのか、ちゃんと検証すればいい
検証の結果、本当は逆に生産性が上がってバグが減るのかも知れない
> 生産性が落ちてバグが増えそうで怖い
見えないものを怖がるな
どのようなヘタクソに、どのようなコーディングルールを強いた場合、
生産性がどれくらい落ちて、バグがどれくらい増えるのか、ちゃんと検証すればいい
検証の結果、本当は逆に生産性が上がってバグが減るのかも知れない
611デフォルトの名無しさん
2011/01/29(土) 21:51:55612デフォルトの名無しさん
2011/01/30(日) 01:19:42 >611
>最低でもauto_ptr
そしてコンテナでハマると。
>609,610
バカをフォローする手間を省くためだと思う。
ルールを決めるに当たって
・バカでも憶えやすい・理解しやすい
・特定の条件下では最も無難
・機械的にチェックしやすい
に傾きがちなのもきっとそのせい。
>最低でもauto_ptr
そしてコンテナでハマると。
>609,610
バカをフォローする手間を省くためだと思う。
ルールを決めるに当たって
・バカでも憶えやすい・理解しやすい
・特定の条件下では最も無難
・機械的にチェックしやすい
に傾きがちなのもきっとそのせい。
613デフォルトの名無しさん
2011/01/30(日) 02:32:19 昔は馬鹿を育てたんだけどな
俺も育てられたし
俺も育てられたし
614デフォルトの名無しさん
2011/01/30(日) 15:27:32 ポインタをnullクリアより、変数のスコープを小さくしましょうとか、
使い回しをやめろとか教えたほうがいいだろ。
ポインタをnullクリアって、バグがおきないとかバグを発見しやすくする
工夫じゃなくて、バグってもなんとなく動いちゃう工夫だし。
あと上から目線で馬鹿向けって言ってるけど、使い終わったポインタを
NULLクリアするって言ってるやつって、馬鹿向けじゃなくて本気でそれ
がいいって思ってるっぽいし。
使い回しをやめろとか教えたほうがいいだろ。
ポインタをnullクリアって、バグがおきないとかバグを発見しやすくする
工夫じゃなくて、バグってもなんとなく動いちゃう工夫だし。
あと上から目線で馬鹿向けって言ってるけど、使い終わったポインタを
NULLクリアするって言ってるやつって、馬鹿向けじゃなくて本気でそれ
がいいって思ってるっぽいし。
615デフォルトの名無しさん
2011/01/30(日) 15:38:08 スタイルというより教育だな。
616デフォルトの名無しさん
2011/01/30(日) 15:49:28 ある程度熟達すればコーディングスタイルにほとんどばらつきが出ない Lisp 系は、
コーディングスタイルという点ではけっこういい言語かも知れない
コーディングスタイルという点ではけっこういい言語かも知れない
617デフォルトの名無しさん
2011/01/30(日) 15:51:29 馬鹿の度合いにもよるけどな。
とにかくいじらせるコード量を減らすこと。
今はそれで対処できるのでそうしてる。
教育できそうな馬鹿っていいよね。
うらやましいよ。
こっちの馬鹿は英単語すら読めねえんだぜ。
だから当然エラーメッセージもw
とにかくいじらせるコード量を減らすこと。
今はそれで対処できるのでそうしてる。
教育できそうな馬鹿っていいよね。
うらやましいよ。
こっちの馬鹿は英単語すら読めねえんだぜ。
だから当然エラーメッセージもw
618デフォルトの名無しさん
2011/01/30(日) 15:54:38619デフォルトの名無しさん
2011/01/30(日) 15:57:54 >>614
> 本気でそれがいいって思ってるっぽい
一概にそうとは言いきれない
無限ループ
入力 -> フィルター -> 出力 ==> 別プロセス
をやると, 世代別 GC しか持ってない言語だと, フィルターの出力段近くで使っ
てる変数とか出力バッファがらみの動的オブジェクトは明示的に null 代入し
ないとメモリー足りなくなる
> 本気でそれがいいって思ってるっぽい
一概にそうとは言いきれない
無限ループ
入力 -> フィルター -> 出力 ==> 別プロセス
をやると, 世代別 GC しか持ってない言語だと, フィルターの出力段近くで使っ
てる変数とか出力バッファがらみの動的オブジェクトは明示的に null 代入し
ないとメモリー足りなくなる
620デフォルトの名無しさん
2011/01/30(日) 16:15:53 deleteしたポインタにnull入れても無意味だし、GCある言語でも
スコープはずれたり使いまわししてる変数にnull入れても無意味。
スコープはずれたり使いまわししてる変数にnull入れても無意味。
621デフォルトの名無しさん
2011/01/30(日) 17:20:47 GC目的以外ならnullは有効だろう。
シングルトンパターンでの生成を遅延させたりするとき、
bool isinitedみたいなよけいないもんを使うより単に、
Foo foo = null;
getInstance() {
if (foo == null) foo = new FooBig();
return foo;
}
とすれば満足では。
あと、Foo::delete(Foo **foo)みたいにして
中でdelete *foo; *foo = null;とかさせておいて、
呼び出し元で、それ以降の望まないfoo->bar()を失敗させるのもやった。
当時はこれでうまくいったと思ってたが、今見るとなんかアホっぽいけど。
シングルトンパターンでの生成を遅延させたりするとき、
bool isinitedみたいなよけいないもんを使うより単に、
Foo foo = null;
getInstance() {
if (foo == null) foo = new FooBig();
return foo;
}
とすれば満足では。
あと、Foo::delete(Foo **foo)みたいにして
中でdelete *foo; *foo = null;とかさせておいて、
呼び出し元で、それ以降の望まないfoo->bar()を失敗させるのもやった。
当時はこれでうまくいったと思ってたが、今見るとなんかアホっぽいけど。
622デフォルトの名無しさん
2011/01/30(日) 17:35:24 ポインタのnullクリアは、GC関連なら特殊なパターン以外は意味ないし、
バグを防ぐって意味なら、変数のスコープを狭くしなさいとか、使いまわしは
やめなさいとかってルールのほうがいいよね。
バグを防ぐって意味なら、変数のスコープを狭くしなさいとか、使いまわしは
やめなさいとかってルールのほうがいいよね。
623デフォルトの名無しさん
2011/01/30(日) 21:49:58 不正アクセス防止になるじゃねーの? JAVAなんか使わないから知らんけど。
624デフォルトの名無しさん
2011/01/30(日) 22:16:04 いやならないんじゃないの?
625デフォルトの名無しさん
2011/01/31(月) 00:20:16 ぬるぽが出るんじゃないの?
626デフォルトの名無しさん
2011/02/05(土) 00:36:57 nullクリアが真価を発揮するのは、デバッガでソース追う時。
スパゲティなソースでも、きちんとnullクリアしてるかどうかで
デバッグのしやすさが格段に違う。
「追いやすいコード」を目指すなら、多少手間でもnullクリアをしとくべき。
読みやすさを心がけてるなら、追いやすさも当然心がけるよな?
スパゲティなソースでも、きちんとnullクリアしてるかどうかで
デバッグのしやすさが格段に違う。
「追いやすいコード」を目指すなら、多少手間でもnullクリアをしとくべき。
読みやすさを心がけてるなら、追いやすさも当然心がけるよな?
627デフォルトの名無しさん
2011/02/05(土) 01:19:09 free(p);
#if DEBUG
p = NULL;
#endif
ですねわかります
#if DEBUG
p = NULL;
#endif
ですねわかります
628デフォルトの名無しさん
2011/02/05(土) 02:04:04 >>626
null クリアでトレースしやすくなる理由がわかりません。
null クリアでトレースしやすくなる理由がわかりません。
629デフォルトの名無しさん
2011/02/05(土) 16:34:51 >627
そしてリリース版/デバッグ版の挙動の違いに悩まされる訳ですね。分かります。
>628
一部のデバッガが、未初期化・delete後の領域に
0xccとか埋める理由を考えてみると良いかと。
とか書くとnullクリアしなくても、その機能だけでも十分とか言い出すんだろうな。
そしてリリース版/デバッグ版の挙動の違いに悩まされる訳ですね。分かります。
>628
一部のデバッガが、未初期化・delete後の領域に
0xccとか埋める理由を考えてみると良いかと。
とか書くとnullクリアしなくても、その機能だけでも十分とか言い出すんだろうな。
630デフォルトの名無しさん
2011/02/05(土) 16:42:32 >>629
0xcc とか埋めるのはデバッガじゃないよ。
VC++ でデバッグビルドの時のデフォルト動作だったはず。
で、その機能はトレースのしやすさとは関係ないと思うんだけど、どういうこと?
うっかり破棄後のポインタを触る可能性を考えるなら、スマートポインタを
使っておけばスコープアウトで解放するんだからほぼ根絶できるし、
スコープアウト前に解放する場合はスマートポインタが null クリア相当の
ことはするし。
手間をかけてでも null クリアしとけというのはやっぱりわからん。
0xcc とか埋めるのはデバッガじゃないよ。
VC++ でデバッグビルドの時のデフォルト動作だったはず。
で、その機能はトレースのしやすさとは関係ないと思うんだけど、どういうこと?
うっかり破棄後のポインタを触る可能性を考えるなら、スマートポインタを
使っておけばスコープアウトで解放するんだからほぼ根絶できるし、
スコープアウト前に解放する場合はスマートポインタが null クリア相当の
ことはするし。
手間をかけてでも null クリアしとけというのはやっぱりわからん。
631デフォルトの名無しさん
2011/02/05(土) 20:54:22 Javaの話じゃなかったのか
632デフォルトの名無しさん
2011/02/05(土) 21:35:50 Java で 0xcc 埋めとか、無いよな。
633デフォルトの名無しさん
2011/02/06(日) 18:13:55 そんなもん入ってたら大変なことになるだろうな
634デフォルトの名無しさん
2011/02/06(日) 21:32:52 >>633
なんで?
プログラマやデバッガが Java の意味として解釈できるアクセス対象は、
せいぜいバイトコードまでで、そりよりしたのレベルはランタイムに依るから、
実際のところ 0xcc で埋められていようといまいと、何も起こらないと思うんだが
(正確にはインターフェースのこちら側にとっては何も起こってないように見える)
なんで?
プログラマやデバッガが Java の意味として解釈できるアクセス対象は、
せいぜいバイトコードまでで、そりよりしたのレベルはランタイムに依るから、
実際のところ 0xcc で埋められていようといまいと、何も起こらないと思うんだが
(正確にはインターフェースのこちら側にとっては何も起こってないように見える)
635デフォルトの名無しさん
2011/02/06(日) 21:45:00636デフォルトの名無しさん
2011/02/06(日) 22:13:55 >>635
> その 0xcc 埋めは Java では実装できないだろ
だから、プログラマやデバッガの立場では 0xcc 埋めできないんだから、
実際に 0xcc が入っていても大変なことになんてなるわけないと思うんだが
> その 0xcc 埋めは Java では実装できないだろ
だから、プログラマやデバッガの立場では 0xcc 埋めできないんだから、
実際に 0xcc が入っていても大変なことになんてなるわけないと思うんだが
637デフォルトの名無しさん
2011/02/06(日) 22:22:39638デフォルトの名無しさん
2011/02/07(月) 00:29:09 >630
>うっかり破棄後のポインタを触る可能性を考えるなら、スマートポインタを
>使っておけばスコープアウトで解放するんだからほぼ根絶できるし
それはメモリ管理が楽になるだけであって、トレースしやすさとは別の話だと思うけど。
トレースし易いってのは、nullとか0xCCとか埋められれば、特定のアドレスの値を
見れば状態が分かるとかいう事だと思うが。
>うっかり破棄後のポインタを触る可能性を考えるなら、スマートポインタを
>使っておけばスコープアウトで解放するんだからほぼ根絶できるし
それはメモリ管理が楽になるだけであって、トレースしやすさとは別の話だと思うけど。
トレースし易いってのは、nullとか0xCCとか埋められれば、特定のアドレスの値を
見れば状態が分かるとかいう事だと思うが。
639デフォルトの名無しさん
2011/02/07(月) 00:32:55 0xccが無効なオブジェクト扱いになるんかいな。NULLは処理系として例外扱いだろ?
640デフォルトの名無しさん
2011/02/07(月) 00:36:36641デフォルトの名無しさん
2011/02/07(月) 00:47:22 >640
ポインタの値を見れば、そのポインタの状態は一目瞭然ですよね。
ポインタの値を見れば、そのポインタの状態は一目瞭然ですよね。
642デフォルトの名無しさん
2011/02/07(月) 00:51:49 >>641
スコープアウトさせてしまえば見るまでも無く状態は明白ですよね。
スコープアウトさせてしまえば見るまでも無く状態は明白ですよね。
643デフォルトの名無しさん
2011/02/07(月) 00:56:31 >642
「デバッガでポインタをウォッチしているケース」は想定してます?
「デバッガでポインタをウォッチしているケース」は想定してます?
644デフォルトの名無しさん
2011/02/07(月) 01:01:32 >>643
してません。何のためにそんなことしてるのかな?
してません。何のためにそんなことしてるのかな?
645デフォルトの名無しさん
2011/02/07(月) 01:36:36 例えば
Hoge *p = new Hoge()
if( … ) {
// 何かの処理
}
moge( p );
のようなソースで、一々ソース追わずに moge() まで飛ばしてから p を見るとか。
Hoge *p = new Hoge()
if( … ) {
// 何かの処理
}
moge( p );
のようなソースで、一々ソース追わずに moge() まで飛ばしてから p を見るとか。
646デフォルトの名無しさん
2011/02/07(月) 01:43:58 >>645
だから、たとえば何のために p を見るの?それで何が知りたいの?
だから、たとえば何のために p を見るの?それで何が知りたいの?
647デフォルトの名無しさん
2011/02/07(月) 01:48:41 デバッガを使わないとコーディングもデバッグもできない人が世の中にはいるようで。
648デフォルトの名無しさん
2011/02/07(月) 02:39:24 >646
>たとえば何のために p を見るの?それで何が知りたいの?
仕様通りの結果が得られたかを 知るため/知りたい。
null 埋めルールが徹底されてりゃ、途中で p が delete されたかどうかも
pを見るだけで容易に分かる。
p の先を見たり、大袈裟なツールに頼る必要も無い。
「トレースしやすい」とはそーいうことです。
>647
古文書の解析にはデバッガ必須。
>たとえば何のために p を見るの?それで何が知りたいの?
仕様通りの結果が得られたかを 知るため/知りたい。
null 埋めルールが徹底されてりゃ、途中で p が delete されたかどうかも
pを見るだけで容易に分かる。
p の先を見たり、大袈裟なツールに頼る必要も無い。
「トレースしやすい」とはそーいうことです。
>647
古文書の解析にはデバッガ必須。
649デフォルトの名無しさん
2011/02/07(月) 02:43:55650デフォルトの名無しさん
2011/02/07(月) 02:49:12 >>645
いまどき生ポインタ使って自分で delete するやつなんていねーだろ。
いまどき生ポインタ使って自分で delete するやつなんていねーだろ。
651デフォルトの名無しさん
2011/02/07(月) 03:01:24 >649
分かってて言ってます。
(勿論スマートポインタを使う方が賢いと言うことも。)
>で、その機能はトレースのしやすさとは関係ないと思うんだけど、どういうこと?
とか言ってるから、null埋めそのものがトレースにどう有益かを述べてるだけですが何か。
分かってて言ってます。
(勿論スマートポインタを使う方が賢いと言うことも。)
>で、その機能はトレースのしやすさとは関係ないと思うんだけど、どういうこと?
とか言ってるから、null埋めそのものがトレースにどう有益かを述べてるだけですが何か。
652デフォルトの名無しさん
2011/02/07(月) 03:31:41 つまり、「おいらの頭はスカスカだから、NULL埋めしてデバッガで追わないとどうしようもないスパゲッティコーディングしかできないよ」ってことですね。判ります。
653デフォルトの名無しさん
2011/02/07(月) 03:33:11 或いは、「適切にコーディングされた工芸品のようなコードでもデバッガで追わないと理解できないくらい頭がゆるゆるなんです」とか。
654デフォルトの名無しさん
2011/02/07(月) 03:33:33655デフォルトの名無しさん
2011/02/07(月) 03:40:56 >652
貴方のような物分りの悪い方に「このポインタは用済み」ってのを明示するためです。
貴方のような物分りの悪い方に「このポインタは用済み」ってのを明示するためです。
656デフォルトの名無しさん
2011/02/07(月) 03:42:50 nullを埋めないと明示できないのか。
657デフォルトの名無しさん
2011/02/07(月) 05:01:59 スマートポインタを使えない状況も考慮すると、NULL埋めを徹底させた方がいい気もするなぁ
実際の大規模プロジェクトの現場では、スマートポインタで統一させるのと
初期化/使用後にNULL埋めを徹底させるのと、どっちが多いんだろうか?
実際の大規模プロジェクトの現場では、スマートポインタで統一させるのと
初期化/使用後にNULL埋めを徹底させるのと、どっちが多いんだろうか?
658デフォルトの名無しさん
2011/02/07(月) 08:55:11 Cに縛られているロートルが多いと言うことを鑑みると、後者が多いと思われ。
なんせ未だにカラム制限のあるコーディング規約もあるくらいだ。
なんせ未だにカラム制限のあるコーディング規約もあるくらいだ。
659デフォルトの名無しさん
2011/02/07(月) 09:11:44660デフォルトの名無しさん
2011/02/07(月) 10:28:07 馬鹿なプログラマがスマポ使えないんだお。
661デフォルトの名無しさん
2011/02/07(月) 11:28:21 スマポが必要になったことが無い。俺が馬鹿だからだろうか。
662デフォルトの名無しさん
2011/02/07(月) 11:37:22 >>661 そのとおりか、あるいは経験不足か、あるいは経験過多です。
663デフォルトの名無しさん
2011/02/07(月) 11:42:21 つまり、明日は晴天だけど時々曇りで場合によっては雨ということですね
664デフォルトの名無しさん
2011/02/07(月) 11:47:12665デフォルトの名無しさん
2011/02/07(月) 11:50:40666デフォルトの名無しさん
2011/02/07(月) 12:25:09 >>665
OSが提供する安全なユーザ空間の上でしかプログラムを組んだ事の無い
アプリ屋さんだと、ちょっと想像しにくいと世界だと思う
そういうもんなんだよとしか言えないし面倒なんで詳しい説明はしない
OSの構造や設計法あるいはリアルタイムOSの解説など
ネットで調べるなり本を読むなり該当スレへ質問するなり自分で考えてくれ
OSが提供する安全なユーザ空間の上でしかプログラムを組んだ事の無い
アプリ屋さんだと、ちょっと想像しにくいと世界だと思う
そういうもんなんだよとしか言えないし面倒なんで詳しい説明はしない
OSの構造や設計法あるいはリアルタイムOSの解説など
ネットで調べるなり本を読むなり該当スレへ質問するなり自分で考えてくれ
667デフォルトの名無しさん
2011/02/07(月) 12:32:07 >>666
いや、俺は組み込み屋なんだが。
幸いにして関わったプロジェクトでは C++ コンパイラが使えたんで、
何の問題も無く使えている(ような気がする?)。
もちろん OS のある環境とまったく同じというわけにはいかないけど、
少なくともスマートポインタを使わない理由は無い。現に使えている。
なんだろうな?
まぁもうちょっと調べてみるよ。
いや、俺は組み込み屋なんだが。
幸いにして関わったプロジェクトでは C++ コンパイラが使えたんで、
何の問題も無く使えている(ような気がする?)。
もちろん OS のある環境とまったく同じというわけにはいかないけど、
少なくともスマートポインタを使わない理由は無い。現に使えている。
なんだろうな?
まぁもうちょっと調べてみるよ。
668デフォルトの名無しさん
2011/02/07(月) 12:39:41 スマートポインタは何を解決してくるの?
deleteの書き忘れ?
deleteを書き忘れちゃうようなコードを書く人のためのもの?
deleteの書き忘れ?
deleteを書き忘れちゃうようなコードを書く人のためのもの?
669デフォルトの名無しさん
2011/02/07(月) 13:33:50 しょぼい組み込みだとコンパイラがないとか
コンパイラの信頼性とか、そういう世界なのかな。
コンパイラの信頼性とか、そういう世界なのかな。
670デフォルトの名無しさん
2011/02/07(月) 14:26:40 >>668
マーフィーの法則によるとdeleteを書き忘れない人は存在しない
マーフィーの法則によるとdeleteを書き忘れない人は存在しない
671デフォルトの名無しさん
2011/02/07(月) 14:35:02 ()や{}を書く時セットで両方記入しておいて、
カーソル移動して中身を後から書いてる。
同様に、new書いたらdeleteを直後に書く。
直後じゃなかったとしても、生成と破棄はセットで設計してるから大丈夫。
対になるものはいつも対応を取りながら進めていく。
カーソル移動して中身を後から書いてる。
同様に、new書いたらdeleteを直後に書く。
直後じゃなかったとしても、生成と破棄はセットで設計してるから大丈夫。
対になるものはいつも対応を取りながら進めていく。
672デフォルトの名無しさん
2011/02/07(月) 14:57:55 >>667
ちなみにターゲットマシンのCPUは何でございましたでしょうか?
ちなみにターゲットマシンのCPUは何でございましたでしょうか?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★11 [蚤の市★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 今年の流行語大賞 『働いて働いて働いてまいります』が受賞で不快感… 過労自殺の遺族らが会見「家族にむち打つような行為だ」 [冬月記者★]
- 【沖縄】開業4ヵ月でこれは…“国民の税金”投入の『ジャングリア沖縄』で見た衝撃的な光景と、モチベーションが低い一部スタッフの現状 [ぐれ★]
- クズ「勉強頑張らなかった奴は一生DQNと一緒に肉体労働しろ」☚勉強頑張れるのも環境と巡り合わせなんだが? [783475554]
- 正直教師が授業する必要なくね?
- インド料理屋に抗議に行った
- 【正論】検察「山上よ、どんな事情があろうと暴力が許されない」 [442080748]
- 熱はないけど倦怠感があるんやが
- スマホゲ問い合わせ俺「ここでこんなことしたらバグった!」返答「アカウント情報と画面のスクショと操作手順をメールで送って」
