ヘタなコードの書き方 ..
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