ヘタなコードの書き方 ..
[2ch|▼Menu]
651:デフォルトの名無しさん
08/05/11 22:44:42
わかりやすいコードを作成するための 6 つの方法
URLリンク(www.ibm.com)

ヒント 1: 賢い人にならってコメントを付けること
ヒント 2: #define をたくさん使うこと。ただしやたらに使うのは禁物です
ヒント 3: わかりにくい変数名を使わないこと
ヒント 4: エラー・チェックを行うこと。誰にだって間違いはあります
ヒント 5: 「Premature optimization is the root of all evil (早まった最適化は諸悪の根源である)」 - Donald Knuth
ヒント 6: あまりにも賢くなりすぎないこと

652:デフォルトの名無しさん
08/05/11 22:47:45
>やっつけでもグローバル変数8割はないだろ。
>スクリプト言語で、50行のソースとかならともかく。

やっつけなんて精々1・2画面程度のソースなんじゃね?
んな、やっつけで500行も書くとは思えんが。

653:デフォルトの名無しさん
08/05/11 23:15:19
そもそも、メンバ変数とか言ってるから C++ の話だと思うんだが、C++ で malloc が
どうのこうのと言ってる >>641 が人のコードを批判するのもどうかと思う。

654:デフォルトの名無しさん
08/05/12 16:24:18
>>653
new/delete はおろか malloc/realloc/free すら使っていない、って事だろう。
態々論点からズレたところを指摘せんでも。

655:デフォルトの名無しさん
08/05/12 21:26:22
え〜〜っと、本人乙ってことでいいのかな。

656:デフォルトの名無しさん
08/05/12 22:24:06
newもmallocもHeapAllocも使わないならどうやってヒープ確保すんの

657:デフォルトの名無しさん
08/05/12 22:42:37
配列を使わないのにヒープなんていらないだろ。

658:デフォルトの名無しさん
08/05/12 23:08:15
複数個のデータが必要な時はどうしてるんだ?
まさか
int n0,n1,n2,n3...;
なわけないよな?

659:デフォルトの名無しさん
08/05/12 23:12:27
リンクトリスト

660:デフォルトの名無しさん
08/05/13 04:59:09
>>659
>>659
>>659

661:デフォルトの名無しさん
08/05/13 07:41:24
>>658
std::vector

662:デフォルトの名無しさん
08/05/13 08:44:20
配列は使わないのにSTLは使うなんて、もう何が何だかw

663:デフォルトの名無しさん
08/05/13 11:24:53
>662
C++で、速度がそれほど切羽詰まってなきゃ妥当な選択だけど

664:デフォルトの名無しさん
08/05/13 11:37:45
vector なら配列も使ってないしヒープもいらないと言うのか?
vector は配列の一種だし、中でヒープも使ってるはずなんだが。

665:デフォルトの名無しさん
08/05/13 11:55:40
ユーザコード内で使うのは駄目ってことなんじゃないのかな

666:デフォルトの名無しさん
08/05/13 13:06:55
ユーザーコードって何だよ

667:デフォルトの名無しさん
08/05/13 14:58:52
相手の意図を読むとかググるとかできんのかな。

668:デフォルトの名無しさん
08/05/13 16:58:36
>>641で書かれてるヤツがvector使えるとは思えないw

669:デフォルトの名無しさん
08/05/13 20:16:25
初心者です
vector使うのはやっぱ高度な難しいんですか?
やはりGlobalAllocなどで馴れてからにしたほうがいいですhおうか?

670:デフォルトの名無しさん
08/05/13 20:18:07
>>669
やってはいけないことを知ってれば問題ないよ。
追加削除したら参照もイテレータも無効になることを知ってればOK

671:デフォルトの名無しさん
08/05/13 20:31:40
>>669
そもそも日本語使うのは高度な難しいんじゃね?

672:デフォルトの名無しさん
08/05/13 20:33:50
高度な文字コード

673:デフォルトの名無しさん
08/05/14 03:48:47
有名なAccelerated C++では配列やポインタよりも先に
vectorが出てくるから全然不自然ではない。
>>641で言われている人がvectorを使っているのかどうかはさておいて。

674:デフォルトの名無しさん
08/05/14 11:53:11
アクセラC++はstringもchar[]より先なんだよな
""リテラルは出て来るが、stringに入れる為の表記としてだったり
その後もしばらくstringとは別物であることしか説明しない
詳細に説明されるのは、後々charと配列の説明が終わった後

675:デフォルトの名無しさん
08/05/14 12:58:25
同じ著者のC++Primerもそのスタイルになっとるな

676:デフォルトの名無しさん
08/05/14 17:08:47
そもそもGlobalAllocを積極的に使う機会ってあるか?

グローバルハンドルを使わざるを得ない機会はあるが、
そんときにはvectorで代替できない(アロケータで何とかなる問題でもないはず)。

それ以外のときはそもそもmallocとかnew[]で十分、GlobalAllocを選ぶ理由はない。
もちろん、その中のどれよりもvectorのほうが便利だが。

677:デフォルトの名無しさん
08/05/14 23:05:07
new と vector のどっちが便利かはさておいても、malloc のでる幕なんてないと思うが。

678:デフォルトの名無しさん
08/05/14 23:09:04
それは環境依存なので

679:デフォルトの名無しさん
08/05/15 22:11:38
C++でnewではなくmalloc使う状況が思いつかん。
newの実装がひどくて、しかたなくmalloc使っているとか?

680:679
08/05/15 22:17:32
書き込んだ後に思いついて試してみた。
malloc/freeならコンストラクタ/デストラクタが呼ばれないんだな。
そういうわけで、
・コンストラクタ/デストラクタの呼び出しを抑えたい
・ベターCとしてC++使っている
環境なら、mallocもありなんだな。

681:デフォルトの名無しさん
08/05/15 22:22:37
そういう場合でも new char[x] でOK

682:デフォルトの名無しさん
08/05/15 22:34:27
> ・コンストラクタ/デストラクタの呼び出しを抑えたい

そもそもそんな状態になること自体がヘタなコー...

683:デフォルトの名無しさん
08/05/16 12:13:29
realloc使うときとか?

684:デフォルトの名無しさん
08/05/16 23:51:59
>>680
> malloc/freeならコンストラクタ/デストラクタが呼ばれないんだな。
明示的に operator new ( size_t ) を呼べばコンストラクタは呼ばれないし、インターフェース的にも(例外以外は)malloc() 互換であり、その理由ならば malloc() は不要。

685:デフォルトの名無しさん
08/05/17 01:59:01
STLが使えない時にreallocしたいときだな

686:デフォルトの名無しさん
08/05/20 11:34:08
そのときはrealloc()を使えばいいのだから、やはりmalloc()は不要。

687:デフォルトの名無しさん
08/05/26 11:20:04
#include<stdio.h>
#include <windows.h>

void main(int argc, char **argf) {
argc = main(argc, argf);
return EXIT_SUCCESS;
}

688:デフォルトの名無しさん
08/05/27 00:25:39
コンパイル通らないだろ

689:デフォルトの名無しさん
08/05/27 22:35:06
さすがに、void main() で値を返してるから、エラーになっちゃうな。

int main() なら、コンパイルは通るけど、

test.cpp(7) : warning C4717: 'main' : すべてのコントロールのパス、
関数を回帰するとランタイム スタック オーバーフローが発生します。

と言われる @ VC++ 2005 Express

690:デフォルトの名無しさん
08/05/27 22:38:09
おきるわな


691:デフォルトの名無しさん
08/05/27 23:19:05
>>687
so what?

692:デフォルトの名無しさん
08/06/09 23:27:32
だからなにwwwwwww

693:デフォルトの名無しさん
08/08/05 11:09:16
>>679
operator new
主にデバッグ用。まぁ後はリリースビルド時に
速度を殺しても自動で0クリアしたいと時とか。

昔、ヘタというか、見て驚愕したコード
#define LOOP_CANCELER(a)    if(a>500000) break;
#define LOOP_CANCELER_COUNT(a) a++;

int loop = 0;
while(1)
{
  LOOP_CANCELER(loop)

   :

  LOOP_CANCELER_COUNT(loop);
}

無限ループを恐れたらしい。巨大な関数内の、ありとあらゆるwhileにこれが入っていた。
これが原因でより深い闇へ落ちていったのは言うまでもない。

694:デフォルトの名無しさん
08/08/06 00:21:28
なんで

#define LOOP_CANCELER(a) if(a++ > 500000) break;

ってしないんだろう...。

まあ、そう言う問題じゃないのは承知の上で。

695:デフォルトの名無しさん
08/08/06 08:24:11
#define LOOP_CANCELER(a) (void)0;
って再定義したんじゃだめだったん?

696:デフォルトの名無しさん
08/08/06 08:39:37
C言語なら俺に聞け(入門篇) Part 33
スレリンク(tech板:544番)

217行でインデントが9レベルあったり482行で4レベルだったり……

697:693
08/08/07 01:09:32
>>694
その辺は彼なりになんかあったのかも。
まぁ、そもそもまともな思考があれば、このマクロが及ぼす弊害は簡単に想像つくわけで。

>>695
多分大丈夫だったと思う。しかしこれは氷山の一角で、
そのLOOP_CANCELERが本当に役に立ってるんじゃないかと信じてしまいたくなるほど
壊滅的なコードだった。ベテランも含め誰もが直接触るのは避け、
山ほどバグを出し、それらは場渡り的に修正され、そのままリリースされた。

698:デフォルトの名無しさん
08/09/24 22:26:25
void function()
{


for (int i = 0; i < HOGEMAX; i++)
{
.
.
fuga:
.
.
}


699:デフォルトの名無しさん
08/09/24 22:27:12
途中で投入してしまった。

void function()
{


goto fuga;


}

700:デフォルトの名無しさん
08/10/23 01:44:39
今仕事でメンテしてるのはコメントが疑問形で書いてあって辛い
//このループでXXXがXXXXとなった場合のXXXXをしているのか?

か?って言われても…

701:デフォルトの名無しさん
08/10/25 00:29:53
// はい、やってます。

って、書いとけ。

702:デフォルトの名無しさん
08/10/25 01:00:19
しかし、実際本当にわからないのがヘタコードクオリティ

703:デフォルトの名無しさん
08/10/25 01:25:41
引き継いだコードがマジックナンバーの嵐だった…

704:デフォルトの名無しさん
08/10/25 03:59:33
何か問題あるの?

705:デフォルトの名無しさん
08/11/05 08:45:35
全ての行にコメント書いてます

706:デフォルトの名無しさん
09/01/31 03:07:45
for(int i=0;i<max;i++)
{
   HOGE hoge = new HOGE();
}

707:デフォルトの名無しさん
09/01/31 11:23:32
>>706
*がないからC#か?
だったら問題ないか?

708:デフォルトの名無しさん
09/01/31 11:36:09
ヘタってのは、セキュアじゃないとか、リークするとかとはまた別の要素なんだな。
なんというか、正しい動作はするんだけど素人臭いというか、そんな感じ。

709:デフォルトの名無しさん
09/01/31 19:00:28
無駄なコメント


710:デフォルトの名無しさん
09/02/02 19:43:16
// これはコメントです

711:デフォルトの名無しさん
09/02/07 07:00:28
a = 0; // aにゼロを代入する

712:デフォルトの名無しさん
09/02/08 00:15:27
// 2009/02/08 変更開始
//a = 0; // aにゼロを代入する
a = 1; // aにゼロを代入する
// 2009/02/08 変更終了

713:デフォルトの名無しさん
09/02/14 16:19:32
procedure unko{
ittekuru();
}


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5391日前に更新/166 KB
担当:undef