[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 05/09 11:06 / Filesize : 125 KB / Number-of Response : 558
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ぱっと見て「ヘタだなぁ」と思うコード その5



1 名前:デフォルトの名無しさん [2006/08/12(土) 01:56:11 ]
禁止ネタ(超既出)
・長い関数
・深いネスト
・グローバル変数
・goto
・memset
・malloc - free
・局所ブロック
・サンプルコードのtypo
・記述スタイル
・関数・変数名

過去スレ
その4: pc8.2ch.net/test/read.cgi/tech/1153312202/
その3: pc8.2ch.net/test/read.cgi/tech/1149986051/
その2: pc8.2ch.net/test/read.cgi/tech/1142741989/
初代 : pc8.2ch.net/test/read.cgi/tech/1141867015/


369 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 08:58:17 ]
>>368
もちろん、書かない。
わざわざ適していない方法で書く必要はない。
そういうときは、適している方法で書く。
例えば、再帰で書く

370 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 09:15:02 ]
for文でループまわす必要があるのはリストよりはマップ。
キーと値を特定の順序で取り出したい場合は eachやforeachは弱い。

371 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 09:15:39 ]
若者の都会かぶれが流行ってると聞いちょるがここまで進んでるたぁ、おれぁもうガマンならねぇ!
出直してけぇな>>369さん!

372 名前:386 mailto:sage [2006/10/08(日) 09:26:45 ]
>>368
そういうのはfold_left系の関数の出番だな。
 ruby
(1..n).inject(1){|x,y|x*y}
 C++
#include<boost/iterator/counting_iterator.hpp>
#include<numeric>
#include<functional>
int fact(int n){
    return std::accumulate(
        boost::make_counting_iterator(1),
        boost::make_counting_iterator(n+1),
        1,std::multiplies<int>());
}

373 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 09:28:24 ]
>>372
おっと名前欄にほかのスレの数字残ってたな。
その辺はスルーしといてくれ

374 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 10:01:34 ]
うあ、面倒くさっ!

375 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 10:04:28 ]
> (1..n).inject(1){|x,y|x*y}
うぉ。こんな風にかけるんだ

376 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 10:09:03 ]
haskellだと
factorial n = product [1..n]
haskell万歳!

>>372
int fact(int n)
{
 int res = 1;
 for(int i=2;i<=n;++i)
  res *= i;
 return res;
}

と書いたら「ヘタだなぁ」と思われるの?

377 名前:372 mailto:sage [2006/10/08(日) 10:25:22 ]
思われない思われないw 俺もネタ以外では普通にそうやる。
関数型言語っぽいやりかたはC++ではまだまだ面倒だからね。



378 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 11:02:23 ]
普通に末尾再帰で書けばいいじゃん。
#include <cstdio>
#include <cstdlib>

template <typename T> inline T factrial(int n, T s = 1)
{
return n > 1 ? factrial(n - 1, s * n) : s;
}

int main(int argc, char ** argv)
{
printf("%d\n", factrial<int>(atoi(argv[argc - 1])));
printf("%.20g\n", factrial<double>(21));
return 0;
}

今時のコンパイラならループに展開するだろ。

379 名前:デフォルトの名無しさん [2006/10/08(日) 11:41:00 ]
末尾再帰の最適化って関数型言語限定だと思ってた…
今まで再帰のほとんどをループに直してた僕の努力は一体orz

380 名前:デフォルトの名無しさん [2006/10/08(日) 11:52:17 ]
Javaで、
引数、ローカル変数をできる限りfinalにしてない
コードをみると

あ、こいつはダメだ。

と思う。


381 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 12:17:21 ]
引数までfinal化する必要があるかは程度問題だと思うんだが。
ローカル変数も同じ。

Java使ってまでC++と同じ流儀で徹底しないでもいいだろ。
C++でconstつけない奴は尻が二つに割れるまでチョップの刑だが。

382 名前:380 [2006/10/08(日) 12:37:24 ]
>381
いや俺はできる限り、あらん限りの方策で
すべてfinal化するべきだと思っている。

383 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 13:24:59 ]
うむ

384 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 13:47:24 ]
Delphiで、引数にconstつけて周る俺がきましたぉ

385 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 13:59:43 ]
なんでconsomeはないの?

386 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 18:29:22 ]
>>376 378
下手かどうか以前にバグってるぞ

387 名前:378 mailto:sage [2006/10/08(日) 21:01:10 ]
>>386
どっかバグってた?
#関数名以外でw



388 名前:デフォルトの名無しさん [2006/10/08(日) 22:09:01 ]
C++でクラスにする必要のない処理をわざわざクラス化してるとき

389 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:21:19 ]
>>376 ++i  を使ってる時点で俺的にoutなんだが

390 名前:デフォルトの名無しさん [2006/10/08(日) 22:23:22 ]
*=ってなんでつかwwwwww

391 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:27:46 ]
>>389-390
素人は帰れ。

392 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:35:47 ]
resはどこで確保されてるか

393 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:37:08 ]
>>389
C++の勉強をしましょう。
>>390
Cの勉強をしましょう。

394 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:37:52 ]
>>392
>390が指摘している行の2行上。

395 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:44:24 ]
はいはい、i++と++iは同じです。

396 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:50:20 ]
>>395
C++の勉強をしましょう。

397 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 22:56:04 ]
>>396
その話題飽きた



398 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:00:15 ]
勉強しても++iとi++は同じであることがわかるだけだけどな。

399 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:02:50 ]
>>398
C++の勉強をしましょう。

400 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:03:40 ]
先に加算するか後で加算するかの違い
なんて関係ないことがほどんどだよな

401 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:05:07 ]
C++の勉強をしましょう。

402 名前:デフォルトの名無しさん [2006/10/08(日) 23:06:31 ]
>>376がC++で書いたとは限らない

403 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:23:53 ]
>>402
C++ですが、なにか?

404 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:29:36 ]
>>401
何が違うのか説明してみろ。

405 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:30:20 ]
この場合は何もかわらんな

406 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:30:37 ]
しょうがないな、正解を言うぞ、
i++; は tmp=i,++i,tmp; という命令、階乗は ((1 + n) * n) / 2 で求まる。

うはっWWWオレ天才WW

407 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:33:43 ]
中学の数学の勉強をしましょう。



408 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:35:01 ]
>>400
i++の式値はi
++iの式値はi+1

前とか後とかじゃない、式値が違うだけだ

409 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:37:01 ]
>>408
で、>>376の文脈で違いはあるのか?

410 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:38:00 ]
>>409は400か?
>>400では>>376に言及してないぞ?
急に文脈を無視して>>376に関連付けられても困る

411 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:39:06 ]
>>410
流れ嫁

412 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:39:31 ]
shine!

413 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:42:05 ]
0!が考慮されてないって意味じゃね?

あと++iとi++は戻り値が違う。

414 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:42:45 ]
>>413
で、>>376の文脈で違いはあるのか?

415 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:43:12 ]
>>414
無いね
それがどうしたの?

416 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:44:30 ]
>>415
別に。
じゃ、この話題終了。

417 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:46:23 ]
ここはぱっと見のコードの質を云々するスレなのだから、充分違うと思うが。



418 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:46:27 ]
ところで int *iってして、*(++i++)はどんなのになるの?
文脈的に考えて

419 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:46:53 ]
何が違うの?

420 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:47:49 ]
>>418
Cを勉強しましょう。

421 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:49:29 ]
>>420
答えられないということですね。

422 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:50:33 ]
夏だなあ

423 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:50:33 ]
「〜しましょう」とか言ってる奴うぜー

424 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:51:25 ]
鹿児島商

425 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:56:18 ]
>>418
「i++が右辺値になり、それに前置++を使用しているのでコンパイルエラー」だと思う。

426 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 00:07:48 ]
なんかこの話題最近見たきがするなぁ。

427 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 00:10:16 ]
C++におけるpre/post incrementの知識を披露したいんでしょう。



428 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 00:10:45 ]
このスレの80%はループでできて略

429 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 01:31:43 ]
しかし無知が間違いと確信してるとこを指摘して
突っ込まれているところをニヤニヤしてる分には
ループでもいい

430 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 17:31:25 ]
>>429
あんまり生産的なやり取りじゃないから
見てて気分よくないけどな。

431 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 17:42:01 ]
馬鹿がうつるってのはあるけどな

432 名前:デフォルトの名無しさん mailto:sage [2006/10/10(火) 03:04:39 ]
つまり良くねーんじゃねーか。

433 名前:あぼーん mailto:あぼーん [あぼーん]
あぼーん

434 名前:349 mailto:sage [2006/10/11(水) 10:48:49 ]
あぁ、ここに書き込んでたのか。
クラス名・変数名スレに書き込んだつもりだったんだけど
どこいったんだかわからなくなってた。

で、だ、これ、適当にしたほうがっていうのは
名前に関して2時間とか3時間とか1日とか悩んでも
結局変更することになるんだからほどほどにしとけって意味。

# ていうか、俺が悩んでつけた名前って言うのは
後から見るとピントはずれなことが多い。

リファクタリングをしないって意味じゃない。
Cだとリファクタリング大変だけど・・・。

435 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 16:25:58 ]
もういいって。

436 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 22:28:55 ]
>>434
>俺が悩んでつけた名前って言うのは
名前で悩む前に設計がそれで適切なのかを考えてはどうか。
どの変数・関数がどんな役割を持つのかハッキリしないから
どんな名前つけて良いかが分からない。
役割がハッキリしてればその役割をそのまま名前に落とせば良い。

命名に詰まる時は、設計見直しのサインだよ。

437 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 01:49:11 ]
他人が書いたコードを整理していると、しばしばネーミングに困る。



438 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 02:47:24 ]
>命名に詰まる時は、設計見直しのサインだよ

悩んだ末にすっきり名前が決まると、なんつーかこう、宿便が抜けたような爽快感。
それだけで仕事が終わった様な気持ちになれるな。

いや、冗談抜きで名前が決まった時点で仕事の何割かは完了してるわけなんだけどさ。

439 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 21:34:09 ]
lpszStrButtyakeBuririant0001->getSTRLFSPACETABCOMMA(index)->getSTRCONTROLSHIFTTAB(index_ind)->getChar(index_chr);

440 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 15:46:28 ]
うわー。。。

441 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 18:35:19 ]
malloc 関数で確保してるのに開放は delete 演算子。
2つのメンバ関数間でしか使われてないのでスタック割り当てで十分なはずだが、なぜかメンバ変数。
単体の画面アプリで外から呼ばれるはずもないのに、全てpublic関数。
const の検索結果0件。#DEFINEすら使ってない。何もかもリテラル。
default 句のない switch 文。default が不要な理由などどこにも書いてない。
JOIN すれば一発なのに、単体テーブルアクセスを内部で毎レコード繰り返してるDB参照処理。

どう見ても作り直しです。本当にありがとうございました。

442 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 18:41:50 ]
つ ラップしちゃえ!

443 名前:デフォルトの名無しさん mailto:sage [2006/10/30(月) 04:26:42 ]
malloc(strlen(p)))

444 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 01:52:02 ]
>>443
それだけ見ても、下手かどうか判断できないが。
例えばfgets()の直後に、改行文字を取り除いた文字列の複写を得たいのなら、妥当じゃないか。

445 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 13:04:04 ]
>>444
その処理なら strdup でいいと思うが。

446 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 18:14:51 ]
>>445
strdup がなかったら?

447 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 18:40:47 ]
↓ strdup無いなんてどんな環境だよ
↓ ○○環境にはないんだよボケ
↓ だったら自分でやりゃいいだろボケ
↓ ○○も知らないくせに下手なコードとか言うなボケ
↓ (グダグダな流れが続く)

という予感



448 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 19:39:16 ]
>>446
>strdup がなかったら?

malloc(strlen(p)+1) と strcpy だな。

449 名前:デフォルトの名無しさん mailto:sage [2006/10/31(火) 19:48:18 ]
>>448
長さ覚えといてmemcpyの方がだいぶ速いことがあるよ。

450 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 22:02:11 ]
for(;;){
if(judge){
break;
}
〜〜〜
〜〜〜
}

451 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 22:09:22 ]
>>450
そういうのは終了条件( if(judge){ break; } に相当するトコ)が
複雑になる可能性があるときに書くことあるなぁ。


452 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 22:13:26 ]
>>451
理解の範囲を越えています。

453 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 22:21:05 ]
>>443
コンパイルエラーじゃね?

454 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 22:53:55 ]
>>453
その根拠は?

455 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 23:53:49 ]
閉じ括弧が1つ多い。

456 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 01:01:21 ]
セミコロンがない

457 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 11:19:53 ]
セミコロン
は文の区切りです



458 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 23:56:48 ]
>450
↓だったら普通。また将来↓にする予定で>450と書くのも分からんではない

for(;;){
 if(条件1){
  break;
 }
 if(条件2){
  break;
 }
 :
 if(条件N){
  break;
 }
 :
}

459 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 00:14:27 ]
それは普通
for(;;){
if( is_must_to_break( ... ) ) break;
.
.
.
}
と書くだろ

460 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 00:16:25 ]
>>458
while(is_proceding()) {
 :
}

461 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 02:34:05 ]
>>459
be動詞+助動詞+to+動詞
についてkwsk


462 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 02:38:51 ]
All your bases are belong to us.

463 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 02:45:42 ]
FIXME: bloken English

464 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 22:49:57 ]
>>461
火星語

465 名前:458 mailto:sage [2006/11/23(木) 00:11:50 ]
>459,460
あれが一番常識的っつー意味で「普通」なのではなく
あーいう書き方をしてもそれほど変とも言い切れない、
という意味で「普通」です。

まぁかなり限定的だけど…

466 名前:デフォルトの名無しさん [2007/01/14(日) 15:04:58 ]
このスレでまたコードの更正やっていいですか?w

467 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 20:30:42 ]
ok



468 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 14:01:00 ]
while(*d++ = *s++);


469 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 02:29:29 ]
>>459
クソワロタ

470 名前:450 mailto:sage [2007/01/21(日) 18:48:43 ]
#ifndef __HEADER_H__
#define __HEADER_H__

#define VOLTAGE0_STRING "voltage1"
#define VOLTAGE1_STRING "voltage2"
#define VOLTAGE2_STRING "voltage3"

#endif //__HEADER_H__
-------------------------------------

いろいろな意味で勘弁してよ〜


471 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 06:05:45 ]
#define BASE \
 unko_t **my_unko;\
 int penis_count;\

struct SuperPenis {
 BASE
 ...
}

struct OldCunt {
 BASE
 ...
}

こういうの嫌い。ていうかマクロで変数定義済ませるコードはイヤ。

472 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 10:19:26 ]
そんなヤツはおらんやろ〜

473 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 10:39:18 ]
>>471
これは酷い。

474 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 16:23:19 ]
>>471
うーん。本来
struct Base {
 unko_t **my_unko;
 int penis_count;
}

struct SuperPenis {
 Base base;
 ...
}

struct OldCunt {
 Base base;
 ...
}
であるべきなのを、
その様なベタ書きなデータ設計を強制されるなら
自分もやってしまいそうです

475 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 16:33:33 ]
やるなよ。

476 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 17:28:00 ]
ところがこれが VC のコードで DECLARE_BASE とかいう名前だと
さほど違和感が無いあたり、漏れはMSに毒されてるな・・・

477 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 05:53:40 ]
オプソのライブラリとかでもよく使われてる。>マクロによる一括変数定義
名前空間が特定のライブラリ色に染められるのが不愉快。
こんなだから、再利用性の低いコードばかり生まれるんだよな。

ちなみに、>>471 の方法は、Perlのコードに使われてたのを引っ張ってきた。



478 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 11:52:37 ]
それにしても例に使ってる変数名と構造体名はどうにかならなかったものか。

479 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 04:43:32 ]
かたじけない。

480 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 11:49:31 ]
>>471, >>476
最近の開発で、委譲ベースのMemoryPoolクラスを用意して、

#define MEMORYPOOL_DECLARE(CLS, NUM) ¥
typedef MemoryPool<CLS, NUM>::MyMemPool ¥
static void * operator new(size_t size) {return MyMemPool::alloc(size);} ¥
static void operator delete(void * p, size_t size) {MyMemPool::free(p, size);} ¥

みたいなのを作ったばかり・・・。

481 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 12:42:49 ]
>>480
マクロを使わずにこんなんじゃ駄目だったの?
俺は多重継承でこういういmixin的な使用方法をわりとするけど。

template<typename CLS,int NUM>struct MemoryPool :{
    ...
    ...
    static void * operator new(size_t size) {return alloc(size);}
    static void operator delete(void * p, size_t size) {free(p, size);}
};
class CLS : public MemoryPool<CLS,100>{
    ...
};

482 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 13:28:54 ]
>>481
出来ればそうしたかったんだけど、
MemoryPoolクラスの中身を↓な風に作ってて・・・。

template<typename T, size_t NUM>
struct MemoryPool {
unsigned char * buffer_[sizeof(T)];
...
static MemoryPool block_[NUM];
...
};

class Hoge : public MemoryPool<Hoge, 100> {
....
};

ってすると、sizeof(T)が確定しなくて、
コンパイルエラーになってしまう。
作りを大幅に変えずにエラーを回避する方法はないだろか・・・?

483 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 16:15:41 ]
開発環境は何使ってるんだ?

>>482 の方法で、Visual Studio 2005 Express だと問題なくコンパイルできるぞ。

ただ、

class Hoge: public MemoryPool<Hoge, 100>{

は、当然 Hoge の再定義になるから、

class Hoge1: public MemoryPool<Hoge, 100>{

... とする必要あるけど。

また、うまく動作するかは試してないけどな。

484 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 17:55:42 ]
>>483
環境はVC++6.0です。

> class Hoge1 : public MemoryPool<Hoge, 100>
これだと新たにクラスを作らないといけないので・・・。
ところでさっきのコードは不正確でした。
実際はこんなかんじです。
Effective C++(だかModern C++ Design)を参考にしています。

template<typename T, size_t NUM>
struct MemoryPool {
union Chunk {
unsigned char buffer_[sizeof(T)];
Chunk * next_;
};
static Chunk block_[NUM];
static bool blockInitialized_;
static Chunk * head_;

static void * alloc(size_t size);
static void free(void * p, size_t size);
};

スレ違いのような気もするけど、自分がヘタレだと云う点では
間違っていないな・・・。

485 名前:481 mailto:sage [2007/02/11(日) 18:32:39 ]
>>484
んーそういう場合は実体化のタイミングをずらせばOK。
..なんだけどVC6ってこれ大丈夫だっけ。VC6はtemplate絡みのバグ多すぎでイケるか自信ない...

template<typename T>
union Chunk{
    unsigned char buffer_[sizeof(T)]; 
    Chunk * next_; 
};
template<typename T, size_t NUM> 
struct MemoryPool { 
    static Chunk<T>*block(){static Chunk<T>block_[NUM];return block_;}
    static bool blockInitialized_; 
    static Chunk<T>* head_; 
    static void * alloc(size_t size); 
    static void free(void * p, size_t size); 
};


486 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 20:03:46 ]
>>485
おお。試してみたところ期待通りの結果(継承に置き換え可能)になりました。
(そのままでもOKでしたが、ChunkはMemoryPoolのインナークラスにしました)
なるほど実体化の遅延ですか。勉強になりました。

487 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 03:29:09 ]
480です。しまった、ちゃんとお礼を云ってなかった。
>>481さん、>>483さん、ありがとうございました。

スレ汚しすみません。



488 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 20:25:00 ]
chokin = chokin != 0 ? chokin : 0;


489 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 20:27:06 ]
最適化で消滅しそうだな

490 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 16:49:30 ]
ム板のその4の次スレ、ここでいいの?

491 名前:デフォルトの名無しさん mailto:sage [2007/05/10(木) 16:50:16 ]

×ム
○マ

492 名前:デフォルトの名無しさん [2007/05/21(月) 18:57:37 ]
age。

493 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 00:09:59 ]
今やってるプロジェクト、Cで作っているけど動的なメモリ確保は禁止なんだぜ?
リークの原因になるからだって。


494 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 00:30:24 ]
>>493
一昔前のゲームプログラムとか(携帯機なら今でも)、組み込みだと当たり前では?


495 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 01:33:15 ]
どこの「当たり前」だよ

496 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 01:48:40 ]
そもそも動的に割り当てるほどのメモリが無いというならともかく、
リークするからとmallocを禁止するのは当たり前とは言えないだろうな。

497 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 08:08:12 ]
mallocがクソな環境もあるんだよ



498 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 10:02:54 ]
普通に使っていてリークするようなクソmallocがあるのか、
そりゃたいへんだな。

499 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 12:14:13 ]
リンクオプションで領域確保しておいて、その中で自前で管理するってプロジェクトはあったな。

500 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 12:22:58 ]
リークするからと言う理由だけじゃなくて、そもそも必ず確保できるわけじゃない
可能性があるから malloc() 禁止のところは組み込みなら普通にある。

misra malloc とかでぐぐってみ。

501 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 13:26:43 ]
> 確保できるわけじゃない可能性があるから malloc() 禁止のところは組み込みなら普通にある。

そんなことは誰でもしってます

502 名前:デフォルトの名無しさん mailto:sage [2007/06/02(土) 13:36:13 ]
> そんなことは誰でもしってます
とりあえず知らない人間はいないことをどうやって証明したのかkwsk

503 名前:デフォルトの名無しさん mailto:sage [2007/06/03(日) 03:28:59 ]
マロックさんをわるくいうんじゃない!!

504 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 11:10:03 ]
>>502
誰もが最初は知らなかった筈ですから、
「誰でも」が「遍く」ではないことは想像できることです。
では「誰でも」とはどういった範囲の人たちを指しているのでしょう?
それは >>500 のみぞ汁。

505 名前:>>500 mailto:sage [2007/06/04(月) 22:57:36 ]
> 「誰でも」が「遍く」ではないことは想像できることです。

言い訳乙。

少なくとも俺は、唐突に「誰でも」って書かれたら、全世界の人間を想定する。

506 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 23:02:35 ]
お前が宇宙人を差別することは分かった。

507 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 06:16:20 ]
自分が悪い時に、素直に間違いを認めず「だけど、〜」って関係ない事象を語って
煙にまこうとする奴を見た時は「ヘタだなぁ」と思うな。

コードじゃないけど。



508 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 06:53:36 ]
なんか>>504から臭ってこない?

509 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 09:26:57 ]
組込みやらないやつはsbrkとか自分たちで実装する
環境なんて思いもよらないんだろうな。。。

組込みやらないやつは
void main
を見て
int main
じゃないから下手だ、とか言うんだろうな。

510 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 10:37:29 ]
組み込みにはOSがないと思い込んでいるなら下手どころじゃないがな。

511 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 10:59:34 ]
石屋にはなりたくない。へたすりゃ携帯屋だもん。

512 名前:504 mailto:sage [2007/06/06(水) 11:15:24 ]
>>505
>言い訳乙。
504 ≠ 500 ですよ。間抜けですね。
>全世界の人間を想定する。
素人が知ってるわけがないでしょうに。間抜けですね。

513 名前:>>500 mailto:sage [2007/06/06(水) 22:33:39 ]
自演乙。

514 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 20:32:22 ]
変数宣言とか行末コメントを揃えて書いてあるのを見ると、下手だと思ってしまう。
多分、コボラーを連想しちゃうからだと思う。

unsigned int hogehoge1;
int       hogehoge2;
double     hogehoge3;

間違いなくずれていると思うが、変数の開始位置が揃っていると思ってけれ。


515 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 21:08:51 ]
>>514
これはいまのソースコードがプレーンテキストで記述されていることからくる
問題であって本来テーブル記述できるべきもんだと思うし、俺は揃えてある
ほうが好きだけどなぁ。

516 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 21:42:22 ]
可読性のために変数を揃えることはある

517 名前:デフォルトの名無しさん mailto:sage [2007/06/14(木) 22:07:47 ]
揃えようが揃えまいが可読性は変わらないな、俺の場合。
下手に揃えてあると、修正が面倒くさい。
変数を一個追加するだけなのに、全ての変数宣言を修正する羽目になったりするし。




518 名前:>>500 mailto:sage [2007/06/14(木) 23:27:27 ]
変数宣言は俺も昔は揃えてたけど、最近はあまり気にしなくなった。

でも、行末コメントは今でも揃えてる。ばらばらだと読み辛いから。

519 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 01:52:54 ]
このソース評価してやってくれませんか、皆さん。
pc11.2ch.net/test/read.cgi/tech/1042032733/625

イマイチ反応がなくて寂しかったので
よろしくお願いしますm(_ _)m。

520 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 02:07:24 ]
PL/SQL なんだけど、テーブルからデータを取得する関数が
すでに作ってあるから使って、といわれた。

ライブラリを見てみたら、関数は戻り値が整数型でエラーコードを返す。
これはまいい。

引数を見ると、最初に2つくらいがDB検索のキー。
そしてその後ろに、10個近くのデータ出力用の引数がずらりと並んでいた。
デフォルト引数など用意されているはずもなく、
俺が必要なのはそのうちの1つか2つなのに、この関数を使うためには、
まったく必要のないダミーバッファを引数として渡さなければならないという。

そんなもん使う気にもなれず、select 文書きましたよ。where条件だって
その方が自在だしな。

521 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 07:46:27 ]
>>520
せめてNULLなら無視してくれる仕様だったらよかったのにな

522 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 18:53:06 ]
そういう仕様を考えるのは、汎用機あがりに多いね。

523 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 01:06:10 ]
>>520
いまいち状況よくわからんけど、ラッパー書けば済む話じゃないのか?

524 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 06:20:25 ]
そうだよな。そこでデザインパターンの登場ですよと。

525 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:26:18 ]
ラッパークラスにHeyYoと名付けたら怒られた。

526 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 21:18:39 ]
ラッパークラス名にhogeって書いたら怒られた
www.hoge.org/

527 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 00:17:01 ]
// 消費税を計算する
price = price + 1.5; // 1.5かける


かけてないじゃん
そんなコメントはいらん
*= 使え
ぼったくりすぎだろ
べた書きすんな。何のために期間管理付きの設定ファイル作ったと思ってんだコノヤロウ


と、コードより指摘事項が長くなるようなレビューを続けること1週間。
コンパイラも静的解析ツールも馬鹿の前には無力。もう疲れた...



528 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 15:42:29 ]
>>527
もつかれw
なんというか、プログラミング以前の数々の間違いにワロタw

529 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 18:10:21 ]
デンマークですら消費税25%だぞw

530 名前:デフォルトの名無しさん mailto:age [2007/06/18(月) 21:04:57 ]
ちょwwww

これはぜひとも晒しageなくてはw

531 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 21:06:07 ]
>>527を「price *= 1.05」に直してきたら「将来消費税率が上がったら税額計算してるとこ全部書き直すの?」と突っ込む。
んで、「#define TAX_RATE 1.05 …」とやってきたら「累進税率になったらどうしよう?」
そして「int tax_in(int price){ return price * TAX_RATE; }」→「品目別税率になるかもしれないね」
ここでキレたり泣き出さなかった新人がようやく使い物になる。

532 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 21:09:05 ]
>>531
超アホな癖がつくからそんなことを新人にやるな。

533 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 21:13:16 ]
税率が変わることは可能性が高いから考慮するが、後ろの2つは切り捨てていいだろう。
くだらないことを考えて複雑なコードを書くヤツは下手糞。


534 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 21:19:32 ]
>>533
禿道
「かもしれない」可能性論で実装するのはアホ
大体、消費税が大きく変わったら、そこで予算取って仕事にするんだから、
今下らない理由で無駄な作業をやらせるのは愚行

>「累進税率になったらどうしよう?」
ならなかったら、この作業分の無駄をどうpayするんだ?
>「品目別税率になるかもしれないね」
ならなかったら、この作業分の無駄をどうpayするんだ?


535 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 21:24:41 ]
>>534
真の問題はその作業分が無駄になるだけじゃなくソースコードが
肥大化することでメンテナンスコストが増大することだろ。

536 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:02:40 ]
むしろ真の問題は帰りがけに背中を刺されること。

537 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:05:17 ]
むしろそれは最善の解決策



538 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:08:36 ]
とりあえず >>531 みたいな馬鹿がいるとこ就職しちまったヤツには深く同情する。

539 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:19:23 ]
将来の事を考えてバリアント型にしておきましたッ!!

540 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:27:50 ]
お前の将来は何時までたっても泥沼なのかyo

541 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 22:51:03 ]
> 税額計算してるとこ全部書き直すの?

そもそも、税額計算してるところが複数ある設計に問題があるだろ...。

542 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 00:20:34 ]
みんな、531をそんなに苛めるなよ。
531は会社で評価されていなくて、新人を苛めるくらいしか仕事が無いんだよ。
本人は、「俺って先を読んで設計できる上級者」とか思っているんだから。
余り苛めると引きこもりになっちゃうぞ。


543 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 07:13:54 ]
でもリファクタリングがはやって、思考停止するやつが増えたような気もする。
今回の流れみたいな雰囲気で話するやつが多い。
今回はの流れはわかるけど。
極論を話すやつもいるから。単に仕事をするのがいやって理由だったりする。
そのくせ、締め切りまぎわにまでリファクタリングとかって引っ張る。
設計の思考停止を実装でカバーってな風。


544 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 08:10:33 ]
それなんて俺?

545 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 15:17:45 ]
> そのくせ、締め切りまぎわにまでリファクタリングとかって引っ張る。
おれおれ

546 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 21:51:18 ]
>>531みたいに未来の仕様を先回りして実装するのは下手だが
実際に仕様が追加されたとき(>>531の例でいうと累進税率や品目別税率)に
何箇所も直したりプログラムの構造を変えなくちゃいけなくなったりするのも下手
すなわちYAGNI

547 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 00:13:58 ]
CVSとgrepと正規表現置換ができるエディタがあれば無問題



548 名前:527 mailto:sage [2007/06/20(水) 01:10:39 ]
>>531
一個だけ補足。
新人じゃないよ。

549 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 02:16:37 ]
>>548
オチだとしたらできすぎだよw
おつかれ。


550 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 07:19:46 ]
設計の妥当性の検証って1週間〜1ヶ月くらいはかかると見ておいた方がいいね。
例えば、ふと思いついた設計が、実は糞仕様だったのでその実装をやり直すってよくあるだろ。
まあ、実装してみなければわからん糞さってのもあるけど。
そこを熟成させるために実装を遅らせる効果は大きい。
バージョン管理していても、その糞実装したコストは変わらないわけで。

551 名前:デフォルトの名無しさん mailto:sage [2007/06/21(木) 00:52:35 ]
規模も複雑さも書かずに1週間〜1ヶ月と言われてもなぁ。

552 名前:デフォルトの名無しさん [2007/09/03(月) 15:47:43 ]
よしあげてやる

553 名前:デフォルトの名無しさん [2007/09/04(火) 16:13:00 ]
>>132
>それ以前に何故にthisを明記するか。
this->とやると、入力補完出来るんだよ。


554 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 19:03:30 ]
this入力しないとメンバも保管できないIDEってwwww

555 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 19:11:58 ]
if (f.isVisible() == true)

みたいな不要なことをするやつ。

#define SIZE 10
for (int i = 0; i < SIZE; i++)

みたいにして意地でも配列を使う奴。

typedefしまくってるやつ。

556 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 19:52:53 ]
>>554
井出って、誰だよwwww


557 名前:デフォルトの名無しさん mailto:sage [2007/09/04(火) 20:40:53 ]
>ぱっと見て「ヘタだなぁ」と思うコード

俺のコード。








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<125KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef