ヘタなコードの書き方

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
基礎編

    * サブルーチン(関数)を長くする。数百行以上。
    * コピペ多用
    * ネストを深くする
    * フラグを多用する
    * マジックナンバーを使いまくる
    * 識別子(変数名、関数名)は意味不明に
    * グローバル変数つかいまくり

まとめサイト
http://www34.atwiki.jp/hetacode/

↓以下、応用編、上級者編
2デフォルトの名無しさん:2008/04/12(土) 23:24:04
クラスの数だけインターフェースがある
3デフォルトの名無しさん:2008/04/12(土) 23:31:14
if (success == true) ・・・

とか、bool値のリテラルとの比較があると、コードが素人くさくなる。
(if (success != false) みたいにfalseとの比較ならいいとかって話じゃなくてね)
4デフォルトの名無しさん:2008/04/12(土) 23:37:29
/*************************************************
 *
 *
 *
 *************************************************/

サブルーチンごとに、先頭に、こういう罫線を囲んだコメントがついてるとか。
ひどくなると、サブルーチンの途中でもがんがん入れてある。



5デフォルトの名無しさん:2008/04/12(土) 23:37:38
if not notNullCheck(notNullFlg) then
6デフォルトの名無しさん:2008/04/12(土) 23:41:09
' <<<------------ 初期化 ------------>>>
 :
 :
' <<<------------ DB更新 ------------>>>
 :

コメントにいらん飾りを入れる
7デフォルトの名無しさん:2008/04/12(土) 23:43:25
基礎編
見れば分かるコメントを入れる

fp = fopen(path, "r"); // ファイルオープン

return hogeLength; // hogeの長さを返す

 
8デフォルトの名無しさん:2008/04/12(土) 23:48:39
言語依存なものばかりだな
9デフォルトの名無しさん:2008/04/12(土) 23:49:29
グローバル変数の応用編

size = **;
func(table);

配列は引数で渡してるのに、配列に入ってるデータの個数はグローバル変数で渡すとかってコードを見たときは、
鳥肌たった。
10デフォルトの名無しさん:2008/04/12(土) 23:59:41
Java、C++ あたりのサブルーチンの途中でも変数宣言できる言語でも、宣言は全部サブルーチンの
先頭で行う。
11デフォルトの名無しさん:2008/04/13(日) 00:10:50
引数が30個以上ある関数
12デフォルトの名無しさん:2008/04/13(日) 00:20:22
// ADD START M.YAMADA 2008/4/15
 :
 :
// ADD END

変更履歴みたいなコメントが大量にあるとか、変更前のコードとか削除したコードを消さずに
コメントアウトして残してあるとか。
13デフォルトの名無しさん:2008/04/13(日) 00:25:06
>>12
それは言語の責任ではないしコードの問題でもない
バージョン管理システムに類するものの有無の問題だ
14デフォルトの名無しさん:2008/04/13(日) 00:29:16
・ 暗黙の型変換(キャスト)
・ 省略可能な{}を省略してしまう(K&R)
・ 難解な演算子の使用法
  (例) o = --o - o--;
15デフォルトの名無しさん:2008/04/13(日) 00:31:47
int xxx = 0;
int xxxx = 0;
int xxxxxx = 0;
int xxxxxxx = 0;

↑こういうのじゃなくて

int xxx       = 0;
int xxxx      = 0;
int xxxxxx   = 0;
int xxxxxxx = 0;

↑こういういちいち桁を揃えてるほうが素人っぽく見える
16デフォルトの名無しさん:2008/04/13(日) 00:34:57
>>13
コードの問題です。
コードの書き方と環境の問題は切り離せません。
17デフォルトの名無しさん:2008/04/13(日) 00:42:26
・インデントがずれてる。
・関数が長い(制御のブロックが長い)
・削除せずにコメントアウトしてコードを残してる

のコンボで、どうしようもないコードをいじったことがある。

制御ブロックの最後の } がどこに対応してるか、目で追うのが大変すぎるから、
エディタの対応する括弧に飛ぶ機能を使おうとしたら、

// if (hoge > 100) {  // DEL M.YAMADA 2000/10/10
if (hoge > 200 {  // MODIFY M.YAMADA 2000/10/10

みたいなコードが途中に何行もあって、それも使えないでやんの。

18デフォルトの名無しさん:2008/04/13(日) 00:48:20
>>14
>  (例) o = --o - o--;

これは、下手なコードと言うよりバグだろ。
19デフォルトの名無しさん:2008/04/13(日) 00:48:24
>>17
それは自動整形に通せよ
インデントのズレ修正とコメント削除はできるだろ
20デフォルトの名無しさん:2008/04/13(日) 00:49:12
>>17
コメント内の括弧を対応させようとする間抜けなエディタを使うのを止めたらいい。
21デフォルトの名無しさん:2008/04/13(日) 00:50:08
Cで。
文字列はかならず memset() で初期化。
かつ NULL を使うと上級者。

memset(s, NULL, sizeof s);
22デフォルトの名無しさん:2008/04/13(日) 00:53:13
>>20
素のviしかない環境で作業させられた。

つか、ふだんそういう機能が必要になる局面がないんで、つかってるエディタが、言語の
コメントを意識するかとか、考えたこともないけど。
23デフォルトの名無しさん:2008/04/13(日) 00:57:11
>>19
しょうがないから、コメントとか、大量のデバッグprintはいったん削除して作業した。
勝手にコメントを削除していいような空気でなかったんで、動作確認したら、
変更箇所をもとのソースに書きもどしたけど。
24デフォルトの名無しさん:2008/04/13(日) 00:58:03
>>22
それは作業環境の改善を要求するべきだったね。とりあえずvimかemacs入れてもらうとか。

少なくともSyntax Coloringするエディタは言語のコメントを意識してるかな。
25デフォルトの名無しさん:2008/04/13(日) 00:58:36
>>22-23
それならばスレ違い
26デフォルトの名無しさん:2008/04/13(日) 01:00:57
if (cond)
  return true;
else
  return false;
27デフォルトの名無しさん:2008/04/13(日) 01:13:19
職場の年寄りがVB.NETで仕事してるけど、やっぱ変数名は intHoge とか lngHoge とかやってる。
打ち合わせで、ハンガリアンやめましょー、みたいな話がでて、そうしようみたいになってたと思うけど、
伝わってなかったか。

ほかの人も、MSのクラスライブラリの作成ガイドラインみたいな文章に沿いましょうみたいな話に
なってたはずだけど、なぜか定数値だけは、HOGE_MAX みたいな、Cのスタイルにこだわってたし。
28デフォルトの名無しさん:2008/04/13(日) 01:44:16
>>27
ああ、あるな。
29デフォルトの名無しさん:2008/04/13(日) 05:09:21
やる気の低下で1週間とか放置することがあるから汚いコードとは思いつつコメントだけは多めに入れてある
30デフォルトの名無しさん:2008/04/13(日) 08:38:15
後で大変なことになるぞーと思いつつ、バカが考えたコーディング規約厳守だから俺にはどうにも出来ないorz
31デフォルトの名無しさん:2008/04/13(日) 12:03:20
checkをchkとか、countをcntとか、単語を省略すると一気に素人くさいコードになるな。
とくにcntは、ネイティブはぜったいやらない省略。
32デフォルトの名無しさん:2008/04/13(日) 12:10:19
じゃあこれらは何かの間違いか全部非英語圏の人間の書いたコードだな
ttp://www.google.com/codesearch?q=cnt&hl=en
33デフォルトの名無しさん:2008/04/13(日) 12:15:04
contine なんだかcontrolなんだかcountなんだかワカンネーよ
34デフォルトの名無しさん:2008/04/13(日) 12:16:00
continueだったorz
35デフォルトの名無しさん:2008/04/13(日) 12:17:27
少なくとも1ページ目に出てるのは contine でも control でもなさそうだ
36デフォルトの名無しさん:2008/04/13(日) 12:20:57
ならば問う、cntの正体とはは何だね?明智君
37デフォルトの名無しさん:2008/04/13(日) 12:57:41
変数名が hogeInfo とか hogeData もヘタクソ臭が。
38デフォルトの名無しさん:2008/04/13(日) 13:11:10
>>37
LCCなんて時代錯誤は捨ててアンダーバーで区切るべきだよな
39デフォルトの名無しさん:2008/04/13(日) 13:35:48
if (...) {
 ...
}

// なにやら
// 非常に
// 長ったらしい
// 説明と
// 空白行
// の後に...

else if (..) {
↑ってうぉ?!繋がってんのかよ!!!
40デフォルトの名無しさん:2008/04/13(日) 14:40:09
>>38
infoとかdataじゃ分かりにくいって話じゃないのかこれ。
41デフォルトの名無しさん:2008/04/13(日) 14:43:48
hogeってそのまま書いてあるのか。そりゃひどいな。
42デフォルトの名無しさん:2008/04/13(日) 14:44:37
わかりにくいっていうか、変数なんてデータが入ってるもんなんだから、いちいちDataなんてつけないでいいだろってツッコミ。
43デフォルトの名無しさん:2008/04/13(日) 14:47:05
こういうコードは頭痛が痛いな。
44デフォルトの名無しさん:2008/04/13(日) 15:00:36
>>42
かと言って例えば受信データを入れる変数を Receive にするのはもっとまずいと思うが。
45デフォルトの名無しさん:2008/04/13(日) 15:08:10
>>42
もしくはdataじゃなくてnameとかlengthとか
意味がありそうな単語を付けるとかかな。
46デフォルトの名無しさん:2008/04/13(日) 15:19:58
だから言語実装依存の話なんかしたって意味ねーんだよ
47デフォルトの名無しさん:2008/04/13(日) 15:24:38
名前や長さというのは名前ではなく所属クラス自体に持たせる情報だな

クラスがあればだが

クラスが無い場合は名前に情報を持たせるしかないだろう
48デフォルトの名無しさん:2008/04/13(日) 16:15:02
>>46
自分でスレを立てたらいいよ。"言語に依存しないコードの上手下手"とかそんな感じで。
ム板にしてはかなり盛り上がっているのだし、吠えても意味ない。
49デフォルトの名無しさん:2008/04/13(日) 16:19:04
>>48
言語や環境を特定せずに「コードが下手」と言っても意味がないという指摘なのでは
Javaの論理をVBに持ち込んでも仕方がないし、PHPの書き方をC++で使っても無為だ
50デフォルトの名無しさん:2008/04/13(日) 16:19:16
コメントの書き方とか、変数名の話とか、どこが言語実装依存かよくわからんけど。
51デフォルトの名無しさん:2008/04/13(日) 16:21:14
>8 >46
>7 や >11 辺りは比較的言語に依存しないヘタコードだと思うが。

n = 65; // n に 65 を代入する

ウボァー
52デフォルトの名無しさん:2008/04/13(日) 16:23:12
言語によっては、マジックナンバーを使うべしとか、グローバル変数をどんどん使うべしってのが
お作法になってりするのか。
たしかにN88BASICとかグローバル変数しかないし、HSPとか構造化されてないコードとか当たり前みたいだけど。
53デフォルトの名無しさん:2008/04/13(日) 16:50:01
定番の話題だけど、比較で定数を左にもってくるやつとか

if (100 == n) ・・・

54デフォルトの名無しさん:2008/04/13(日) 17:03:03
= とミスする可能性は排除するには、有りだな
55デフォルトの名無しさん:2008/04/13(日) 17:19:59
最近のコンパイラは警告してくれるけどな。
56デフォルトの名無しさん:2008/04/13(日) 17:21:58
代入と比較を間違えたらコンパイラが警告出すから、定数値を左にもってくるような不自然な書き方はしないってのが主流。
57デフォルトの名無しさん:2008/04/13(日) 17:30:58
google code searchで検索すると

==\s*0 lang:c
1,870,000

0\s*== lang:c
143,000

「定数が左」派は7%超えてるのか。
思ったより多いな。1%未満かと思ってた。
58デフォルトの名無しさん:2008/04/13(日) 17:55:11
VB.netだけど
bFlag = i = 0
って式があって一瞬混乱したんだが、こういう場合には
bFlag = 0 = i
みたいに定数を左に持ってきて、条件式だって明示するのもいいかもしれないとふと思った。
59デフォルトの名無しさん:2008/04/13(日) 18:23:13
おれは、

button.Enabled = (count = 0)

みたいに括弧でくくってるよ。
60デフォルトの名無しさん:2008/04/13(日) 19:11:01
代入演算子と等値演算子が同じなんて、言語仕様がバグってる。
61デフォルトの名無しさん:2008/04/13(日) 19:25:23
左辺と右辺が完全に独立しているから、混乱することはないので問題ない、
それよりも、式のど真ん中で代入できたり、代入がない式でもエラーが出ない方が異常じゃないかと思いつつC++を15年使ってる。
62デフォルトの名無しさん:2008/04/13(日) 20:15:16
「あとで(自分を含め)誰かが読んで何やってるかわかりにくいのがへたなコード」ってことでおk?

・相変わらず昔の名残で変数の宣言をメソッドの先頭でやって、後の方で使う
・同じ変数を、違う場面で(違う意味で)使いまわす
63デフォルトの名無しさん:2008/04/13(日) 20:18:53
・同じ変数を、違う場面で(違う意味で)使いまわす
これ最悪だな
64デフォルトの名無しさん:2008/04/13(日) 20:35:13
関数の中のコードをほんの数行変えてfunc2とかfunc3とかを量産するのはホントやめて欲しい。
65デフォルトの名無しさん:2008/04/13(日) 21:19:10
>1 の条件すべて満たすコードばっかりのところで仕事してる。
関数が長いのに加えてその中に長大な#ifdef〜#endifが無数にあって、一部はネストになってる。
もう人間が読めるようなものではない(がんばって読んでいるけどね)。

この仕事何年やってんだよお前ら。
66デフォルトの名無しさん:2008/04/13(日) 21:30:33
>>60 きもちわるいよね
67デフォルトの名無しさん:2008/04/13(日) 21:39:53
>>62
> ・相変わらず昔の名残で変数の宣言をメソッドの先頭でやって、後の方で使う 

C++やC#で、これプラスして、変数は必ず初期化するってルールでやってるもんだから、適当に0とかNULL
で全部初期化してたりするところもあるな。

コンパイラは未初期化の変数を参照したら警告出してくれるけど、それが台無しになってるっていう。

VB.NETは、初期化を省略したら勝手に初期化するって仕様だから、デフォでこの状態になってるけど。
68デフォルトの名無しさん:2008/04/13(日) 21:57:39
VB.NETにもスコープ用の{}みたいなのが欲しいな。
スコープを意識するような文化が根付けば
メソッドの先頭で変数宣言することも減るかもしれない。
ついでにスコープごとでの処理の抽出もしやすくなり、
自然と各メソッドも短くなるかもしれない。
69デフォルトの名無しさん:2008/04/13(日) 22:06:16
goto使いたくないからという理由で do {} while (0); でくくる。
キモいよ、キモすぎ。
70デフォルトの名無しさん:2008/04/13(日) 22:10:53
・省略可能な{}を記述してしまう
・三項演算子を使わない
71デフォルトの名無しさん:2008/04/13(日) 22:19:42
3項演算子は、書くときはすごい簡潔になってスゲーと思うんだが、他人が書いたのを読まされるときはさっぱり意味がワカンネエと感じる。
72デフォルトの名無しさん:2008/04/13(日) 22:24:48
省略可能な {} ってなに?
if (a) {b = 1;} else {b = 2;} → if (a) b = 1; else b = 2; みたいなやつのこと?
73デフォルトの名無しさん:2008/04/13(日) 22:27:20
>>69
それってdo whileの中で複数判定があって、そこでbreakさせるってこと?
別関数にしてreturnしちゃったほうが手っ取り早そうだな。
74デフォルトの名無しさん:2008/04/13(日) 22:30:11
>>72
それは3項演算子を使わないのほうじゃないのか?
75デフォルトの名無しさん:2008/04/13(日) 22:33:23
if ( a )
 b = 1; //省略可能
else
{
 b = 2; //省略不可能
 c = 1;
}
こういうことか
76デフォルトの名無しさん:2008/04/13(日) 22:35:45
そうなんですよ、いろんな箇所でbreak。
モチベーションとしては呼び出し元にreturnするのは、そのサブルーチンの最後ってことにしたいらしい。
コード自身のクオリティーがそもそも高ければ、エラー処理程度のgoto文は普通にOKだと思いマッスル。
77デフォルトの名無しさん:2008/04/13(日) 22:36:19
>>69
あるある。マイクロソフトのドライバのサンプルコードにそれが。
78デフォルトの名無しさん:2008/04/13(日) 22:38:25
if (cond) {
  n = 0;
}

こういう、一行でもカッコをつけるべしってスタイルの人は、このスタイルが絶対的に正しいって
信じ込んでる場合が多いですな。

79デフォルトの名無しさん:2008/04/13(日) 22:40:27
>>78
はい、そのスタイルは絶対神であります。
80デフォルトの名無しさん:2008/04/13(日) 22:40:53
>>75さんに言うわけじゃないけど
if、elseに限らず、たとえ省略可能であっても {} は省略しないほうがいい。
動作チェック後、たった1行の修正しようとした新人PGがこれにはまったことがあった。
省略可能とはいえ、その後のメンテを考えればつけるべき。
81デフォルトの名無しさん:2008/04/13(日) 22:42:51
if ( a )
 b = 1; //省略可能
 d = 1;
else
 d = 2;
{
 b = 2; //省略不可能
 c = 1;
}

気にしない。気にしない。
82デフォルトの名無しさん:2008/04/13(日) 22:45:57
有名プロダクツのソースとか、定番の書籍とかでも、省略してるのはよくあるよ。

追加したときに、{}を付け忘れてハマるから省略すべきでないってのが理由だけど、
そんなので嵌るのって、10年プログラムやってて、一回あるかどうかだと思われ。
83デフォルトの名無しさん:2008/04/13(日) 22:50:12
>>82
うん、Linux kernelソースなんかは全然ついてないね。

でも、プロプライエタリを複数人で開発してると、ソースの寿命ってそんなに短いわけじゃないから、
いつ新人が入ってきていじりだすか分からない。
事故は未然に防ぐという意味は十分あると思う。
84デフォルトの名無しさん:2008/04/13(日) 22:51:42
>>82
そんな理由じゃなく、神には叛けないからだろ。
85デフォルトの名無しさん:2008/04/13(日) 22:55:27
if ( a )
 b = 1;
これみたいに1行ならいいけど

for (i = 0; i < 100; i++)
 if (aaa (i)) {












 }
こんなのは外側のも囲わないと気持ち悪く感じる
86側近中の側近 ◆0351148456 :2008/04/13(日) 22:55:52
>>82
(っ´▽`)っ
>10年プログラムやってて、一回あるかどうか
かなり高確率じゃないか。
こういうバグで数百億の損害を出すことだってあるんだよ。
87デフォルトの名無しさん:2008/04/13(日) 22:55:57
俺は1行か2行以上か考えて変えるのが面倒くさいという理由で全部に付けてる。
変更で後から付けるのも面倒だし、変更で後から外すのも面倒だ。
とにかく頭を働かせるのが面倒だ。俺のチャンクは他人より少ないんだぜ。
88デフォルトの名無しさん:2008/04/13(日) 22:59:44
2行を1行に修正した時に {} をとるってのもまぁ、律儀といえば律儀なんだろうけど変な気がする。
今のところそんな diff にはお目にかかったことがありません。
89側近中の側近 ◆0351148456 :2008/04/13(日) 23:03:09
(っ´▽`)っがリーダーで、if文に{}をつけないメンバがいたら、

お前は今後の保守において、if文が2行になった時、
{}を付け忘れる奴がいないことを保証できるのか?

と問い詰めるね☆
90デフォルトの名無しさん:2008/04/13(日) 23:04:00
>>85
おれは、制御されるコードが一行のときだけ{} 省略ってルールでやってる。
複数行の場合は省略したら、さすがに見難いと思った。
K&Rはガンガン省略してたけど。

>>86
まあ、10年に一度ってのは、適当だけど、linuxとかやってる人は影響ないって思ってるみたいだね。

>>83
MISRAとか、ループをbrackで抜けるの禁止とか、安全側に振ったら、いくらでも厳しくなっちゃうだろうね。

たとえば{}の位置論争とか、たいがいの人はどっちでもいいじゃんと思うだろうけど、{}の省略は、なぜか
省略しない派の人は、ぜったい自分が正しいと思ってる場合が多いって話。

91デフォルトの名無しさん:2008/04/13(日) 23:06:29
> 複数行の場合は省略したら、さすがに見難いと思った。
具体的にどんなのよ?
92デフォルトの名無しさん:2008/04/13(日) 23:08:00
>>91
>>85 のようなコード
93デフォルトの名無しさん:2008/04/13(日) 23:09:47
>>90
自分が正しいと思ってるかどうかじゃなくて、実際に起こった事故の同じ轍は
二度と踏ませないという意味で説得力があるって話。
94デフォルトの名無しさん:2008/04/13(日) 23:09:57
インデントで見やすくしとけよ。
95側近中の側近 ◆0351148456 :2008/04/13(日) 23:10:26
(っ´▽`)っ
{}の省略のメリットってなんだろう☆
2文字減らせるってことかな☆
デメリットは2行になった時に{}を付け忘れても普通に動くってことだよね
テストで気づけよと思うかもしれないが、将来直す人に対して言うことはできないよ
{}を付け忘れるなとコメントを残す?それだったら{}つけよう☆
96デフォルトの名無しさん:2008/04/13(日) 23:10:43
>>91
if (・・・) {
  if (・・・)
    n = 0;
}

こういう場合は内側のifは{}省略。外側は省略しない。
97側近中の側近 ◆0351148456 :2008/04/13(日) 23:12:29
(っ´▽`)っ
と言いつつ(っ´▽`)っも
if(条件A){
}
else if(条件B){
}
else{
}
ってやるけどね。
厳密に{}をつけるルールなら
if(条件A){
}
else{
  if(条件B){
  }
  else{
  }
}
だね☆
98側近中の側近 ◆0351148456 :2008/04/13(日) 23:13:48
(っ´▽`)っ
だって、見やすいんだもん☆
条件が増えると
if(条件A){
}
else{
  if(条件B){
  }
  else{
    if(条件C){
    }
    else{
      if(条件D){
      }
      else{
        if(条件E){
        }
        else{
        }
      }
    }
  }
}
って感じで深くなっていく・・・
99デフォルトの名無しさん:2008/04/13(日) 23:14:18
>>93
でも、じっさいでかいコードを書いて、実績上げてる人でも、いらねって思ってる人もけっこうな数いるわけで。
そうでないひともいっぱいいるし。
正直「どっちでもいい」レベルの話だとしか思えない。

>>95
メリットはコードが見やすくなる。
100デフォルトの名無しさん:2008/04/13(日) 23:14:51
>>95
全然関係ないが、俺は未来にメッセージを送信できる装置を考案したぞ。
完成したら将来直す人と連絡するために使ってみるか?
101デフォルトの名無しさん:2008/04/13(日) 23:15:55
>>97>>98
厳密うんぬんの方はぶっちゃけどうでもいいんで、脳内で繰りひろげてください。
ただただキモいです。
102側近中の側近 ◆0351148456 :2008/04/13(日) 23:16:34
103側近中の側近 ◆0351148456 :2008/04/13(日) 23:17:41
(っ´▽`)っがキモいのはよくあること。配慮してくれないと☆
104デフォルトの名無しさん:2008/04/13(日) 23:18:53
>>102
ごめん、おれ、あんたとはファーストエンカウントだ。
あんたのことはたぶん忘れないよ。終生キモいってことでインプットしといた。
105側近中の側近 ◆0351148456 :2008/04/13(日) 23:18:57
>>100
(っ´▽`)っ
使ってみて使ってみて☆
106デフォルトの名無しさん:2008/04/13(日) 23:21:08
読みにくいコードって確かに上に書かれているような
「書き方」の問題もあるけど「書き方」だけではない何かがあるよね。
なぜそれをしているのか分からないけど意味がある部分とか
論理的には正しいけど、簡潔に書かれていないとか。
う〜ん、うまく表現できないけど。
107側近中の側近 ◆0351148456 :2008/04/13(日) 23:22:01
>>104
(っ´▽`)っ
サンクス☆
108デフォルトの名無しさん:2008/04/13(日) 23:27:18
>>99
興味本位で聞いちゃうけど見やすいってのは、
行数が少なくなるから?
文字数が少なくなるから?
{}がないことで処理が1行しかないと判定できるから?
109デフォルトの名無しさん:2008/04/13(日) 23:28:06
>>106
最適化の問題かもな。
コメントで補えばいいだろ。
110デフォルトの名無しさん:2008/04/13(日) 23:33:24
>>99
その「どっちでもいい」に足をすくわれた人間は、はたと気づく。
「ここの {} はあってもなくてもいいんじゃないですか?」と言われればちゃんと
自分の実体験からその必要性が説明ができる。
「どっちでもいい」と思ってる奴は今後も引き続き「どっちでもいい」でいいよ。
111デフォルトの名無しさん:2008/04/13(日) 23:45:04
>>108
省略派の人は、省略すべきだと主張したりして、理由を言ったりしないから、一般的な理由はしらない。
お作法系の本でも、そういう議論はみた記憶がない。

個人的には慣れの問題。

>>110
コーディングスタイルって、どれか決定的に有利なのがあれば、2chで議論するまでもなく、とっくにそれに収束してると
思うんだよ。
有力な人たちの間でも考えが分かれてるような問題は、まあ「どっちでもいい」レベルなんだと思うよ。




112デフォルトの名無しさん:2008/04/13(日) 23:45:25
>>78
残念ながらそれは正しくない。なぜコンパイルエラーにならないのか?不思議なくらいだ。
正しくは、こう
if(cond)
{
  n = 0;
}
113デフォルトの名無しさん:2008/04/13(日) 23:52:00
中間とって
if(cond) // {
  n = 0;
// }
こうしとけばいいだろ。
114108:2008/04/13(日) 23:55:29
>>111
最後の理由でないなら安心した。
付けることで思考の妨げになってるんじゃないかと心配してたが
そうでもないようで良かった。
(まあ複数行での括弧付きが読めるんだから当たり前か)
115デフォルトの名無しさん:2008/04/13(日) 23:57:56
>>112
C#だと半強制的にそうなるな。
116デフォルトの名無しさん:2008/04/13(日) 23:58:55
>>111がどの程度の規模のプロジェクトに関わっていて、また、
その中でどのポジションにいるのかわからないけど、
リーダーなどリスクに大して敏感な人は、その「有力な人たち」の一部が
危険性を孕んでいると認めているコーディングスタイルに対して
それを無為無策に放ったりはしない。

「どっちでもいい」と思うんなら別にもう「どっちでもいい」でいいよ。
これ以上は平行線だから。
117デフォルトの名無しさん:2008/04/14(月) 00:01:37
>>115
VSの設定で変更できるよ。
118デフォルトの名無しさん:2008/04/14(月) 00:02:09
お前らの書き込み見てるとどうも正しいコードの書き方について
論じているように思えてならない。
119デフォルトの名無しさん:2008/04/14(月) 00:08:22
じゃあとりあえず
n = cond ? 0 : n;
120デフォルトの名無しさん:2008/04/14(月) 00:15:21
if(...){
...
}
の様に右端に{を書かれると、括弧の対応かなり読みにくい。こんな読みにくいコード書く理由があるのか?
121デフォルトの名無しさん:2008/04/14(月) 00:20:34
じゃあとりあえず
(cond&&(n=0));
122デフォルトの名無しさん:2008/04/14(月) 00:22:27
>>120
俺は昔そう書いてた。理由はCの本がそうだったから。
今では違う
123デフォルトの名無しさん:2008/04/14(月) 00:25:01
>>120
ifがあるってことは{もそこにあるってことだから問題ない
124デフォルトの名無しさん:2008/04/14(月) 00:25:59
ローカル変数を複数の用途に使いまわす

もかなりイライラ来るなあ

メンバ変数だと直させるが
125デフォルトの名無しさん:2008/04/14(月) 00:29:46
XMLのノードは3階層までのアクセスに
限定させる
<a><b><c></b></a>
126デフォルトの名無しさん:2008/04/14(月) 00:30:18
>>120
これは慣れの問題
127デフォルトの名無しさん:2008/04/14(月) 00:36:42
俺はこれが読みにくい

if (...)
 {
  ...
 }
...
128デフォルトの名無しさん:2008/04/14(月) 00:38:54
>>124

for (int i = 0; ...)

が許される言語なら同意

ま、C な人の一部は高級アセンブリだという宗教があって
どっちみちレジスタは使いまわすじゃんみたいなw
129デフォルトの名無しさん:2008/04/14(月) 00:44:09
ループ変数は字面的に局所化されてるように見えるからいいんだが
そうでない変数をこねくり回されると死ねる
130デフォルトの名無しさん:2008/04/14(月) 00:44:33
・明らかに何らかの判断結果を返している関数名が、executeXXXXX()
 逆に、処理を行っているのに checkXXXXXX()
131デフォルトの名無しさん:2008/04/14(月) 01:09:57
普通に書け
132デフォルトの名無しさん:2008/04/14(月) 01:22:31
バグを直してるうちにそうなっちゃうことがあるのは良くあること。
133デフォルトの名無しさん:2008/04/14(月) 02:59:48
#define HYAKU 20
134デフォルトの名無しさん:2008/04/14(月) 05:17:26
>>14
キャストと{}省略、難解な演算子はCなら比較的みんなやるだろ
そうだと言ってくれ…
135デフォルトの名無しさん:2008/04/14(月) 05:26:18
おれはやらんなぁ〜ウヒヒヒヒィ
136デフォルトの名無しさん:2008/04/14(月) 22:46:24
>>134
やってるよ。単に>>14のスキルが低いだけだろ
137デフォルトの名無しさん:2008/04/15(火) 02:34:56
・checkXXX() なんてメソッド名

何がどうなるとその結果になるのか意味わかんねーw
せめて isXYZ() とかにしてください、おながいします
138デフォルトの名無しさん:2008/04/15(火) 05:41:54
統一されているかどうかだなあ
アレコレが混在していたらそれら一つ一つが「オススメ」であっても
ヘタに見える
139デフォルトの名無しさん:2008/04/15(火) 08:02:07
CheckError()だと、エラー有りがtrue/falseのどちらか迷うが
IsError()だとtrueがエラー有りと考えなくても分かるってことだな。
140デフォルトの名無しさん:2008/04/15(火) 10:51:20
変数名には w と v しか使わない。

int wwvwvvww;
char * wwvvwvww;
FILE * wwvwvwvw;
141デフォルトの名無しさん:2008/04/15(火) 13:22:47
>>137
やべぇ、最近までのオレだ・・・
CheckErrorがふつーにあるw
いつもTrueかFalseなのか悩んでたんだよな
これからはちゃんとIsErrorにします・・・
142デフォルトの名無しさん:2008/04/15(火) 14:34:04
呼び出し元でチェックの真偽を確認する時はisErrorと名づけて真偽値を返すようにして
checkErrorというネーミングの時は値を返さずエラーの場合に実行時例外を出すようにしてるなあ
143デフォルトの名無しさん:2008/04/15(火) 20:18:52
変数名、関数名に日本語だらけ。
ウチの社長、他所からソース提供されたときに「読みにくい。日本語にしてくれ」と要求していた。
144デフォルトの名無しさん:2008/04/15(火) 22:08:05
>>120

C++、JAVAなどのコーディング規約ではifの{を右に書くことになっている

ちなみにC#だと改行することになっている
145デフォルトの名無しさん:2008/04/15(火) 22:12:02
>>144
プロジェクトでの規約じゃないのか?
146デフォルトの名無しさん:2008/04/15(火) 22:13:39
まぁ統一されてればどっちでもおk
147デフォルトの名無しさん:2008/04/15(火) 22:19:28
ブラケットはK&R派かGNU派かって認識だったな。
オフィシャルでコーディング規約があるなら教えて欲しい。
148デフォルトの名無しさん:2008/04/15(火) 22:44:50
>>147
C/C++の世界で公式と言えばGNUのこと。
非標準はマイクロソフト。
149デフォルトの名無しさん:2008/04/15(火) 22:50:21
ISOでもANSIでもいいけど規格化されたコーディング規約ってあるの?
C/C++の世界で公式といえばそういうものを指すんじゃないのか?
150デフォルトの名無しさん:2008/04/15(火) 22:56:48
>>149
いいえ。
標準化委員の大多数がGNU関係者だから。
151デフォルトの名無しさん:2008/04/15(火) 23:39:38
結局、そういうふうに書くやつが委員に多いと言うだけであって
オフィシャルじゃないってことか?

意味ねー。
152デフォルトの名無しさん:2008/04/16(水) 00:01:44
>>144
> ちなみにC#だと改行することになっている 

VSの設定いじれば、どっちのスタイルでも使えるよ。
153デフォルトの名無しさん:2008/04/16(水) 00:06:13
コメントでも、ログでも、画面に出すメッセージでも、字の間にスペース入れて目立たせるやつ。

* * * 対  象  デ  ー  タ  更  新 * * *

みたいなの。
特にログでやると検索できねーだろ。アホか。
154デフォルトの名無しさん:2008/04/16(水) 00:27:13
ワロタ
155デフォルトの名無しさん:2008/04/16(水) 01:04:54
・無駄な括弧をつける
 if ((a >= 0) && (b <= 0) && (c != ((10 * 3) / d) + e)) {
・文字を詰める
 if(a>=0&&b<=0&&c!=10*3/d+e){
156デフォルトの名無しさん:2008/04/16(水) 01:04:54
>>152
全員でやってないと、なにかの拍子に書き換えられちゃうんだよな。
デフォルトの力の前には無力だ。
157デフォルトの名無しさん:2008/04/16(水) 02:55:47
各関数にreturnは1個というコード規約に振り回され難解なコードに化けたものを見たことがある。
return1個は慣れればどうってことないけどその人は初体験だったみたい。
ソースレビューはなかったらしい。

多重ネストでforから脱出するフラグがいっぱい♪
158デフォルトの名無しさん:2008/04/16(水) 03:03:46
>>157
例外使ってないってことはCかな。
159デフォルトの名無しさん:2008/04/16(水) 07:02:41
>>155
それは駄目なのか?むしろ括弧はつけろと思うが
演算子はつめてもいいんじゃないか?
160デフォルトの名無しさん:2008/04/16(水) 07:13:25
>>155さんじゃないけど、おれもこれ程度のif文なら無駄な括弧は省きたい。
でも、レビューしたとき「なくてもいいのは知ってるけど、つける規約になってるからつけて」って言われてつけてる。

コンパイルは -Wall なんで、「ambiguous ...」みたいなメッセージをたまに見るところをみると
おれもまだまだダメちんのようです。
161デフォルトの名無しさん:2008/04/16(水) 08:02:34
C系だと括弧は気にせず付けて、VB系だと括弧はなるべく付けないようにしてる。
162デフォルトの名無しさん:2008/04/16(水) 18:14:03
無駄な括弧大好きで、if文は一行でも括弧付ける派の俺が言うのもなんですが
Javaでは
int a[];
よりも
int[] a;
として欲しい
163デフォルトの名無しさん:2008/04/16(水) 22:50:53
・普通のコード
struct Item {
  int id;
  int size;
  string name;
}
Item items[NUM];

・基本
int id[NUM];
int size[NUM];
string name[NUM];

・上級者
struct Item {
  int id[NUM];
  int size[NUM];
  string name[NUM];
}
Item item
164デフォルトの名無しさん:2008/04/16(水) 23:36:51
>>163
基本って何の基本だ?
AoSよりSoAの方がいいという話は聞いたことがあるが、未だにメリットがわからない・・・
165デフォルトの名無しさん:2008/04/16(水) 23:43:32
x >= 0 ? x += 100 : x -= 100;

はどうかな? 「素直にif文使えよ」と言っといたんだけど。

x += (x >= 0) ? +100 : -100;

ならなんとか許容範囲。
166デフォルトの名無しさん:2008/04/16(水) 23:45:46
>>164
パディングの分だけ無駄領域が出にくいとか。
つーか、AoSとかSoAってのも初めて聞いた。
167デフォルトの名無しさん:2008/04/16(水) 23:51:59
>>164
>>1 に載ってる基本レベルかなと思って。
168デフォルトの名無しさん:2008/04/16(水) 23:54:11
>>165
> x >= 0 ? x += 100 : x -= 100;
gcc-4.1.2だとコンパイルできん。
169デフォルトの名無しさん:2008/04/16(水) 23:55:53
名前空間が分かれてるのにわざわざプレフィックスを付ける
struct Hoge {
  int hoge_xxx;
  int hoge_yyy;
  int hoge_zzz;
};

struct tmとかCの標準ライブラリでもやってるけど。
170デフォルトの名無しさん:2008/04/16(水) 23:56:47
>>165
私は頭が悪いので少しでも考えないといけないソースは苦手です。
171デフォルトの名無しさん:2008/04/16(水) 23:58:49
すべての行の右側にコメントが入っている。
FORTRANとかアセンブラの話じゃなくて、C++の話。
172デフォルトの名無しさん:2008/04/16(水) 23:59:14
・なんでもかんでも>>163の上級者に従うコード

プログラムの律速はキャッシュミスにあるので、使用するアルゴリズム、処理によって
データ構造を適切に選ぶ必要がある。
また、組み込み系などメモリがシビアな時は、速度を犠牲にして空間効率を高めたりするので、
開発環境によっても自然、アルゴリズムとデータ構造は適切に選択しなければならない。
173デフォルトの名無しさん:2008/04/17(木) 00:05:23
>>171
富士通だか日立だか忘れたけど、もと有名企業の社員で技術力には自信がありますとかHPでアピールしてる
フリーの人から仕事をもらったら、そういうコード書いてたよ。
こういうところがアマチュアと違うんだとか、本人は得意げだったけど。
174デフォルトの名無しさん:2008/04/17(木) 00:22:22
>>173
書けばいいってもんじゃないんだがなあw
しかも書いてあるコメント見ると、>>7みたいなのがほとんどだった。
175デフォルトの名無しさん:2008/04/17(木) 01:51:14
>>168
調べてみたが、C++ならおkだが、Cだとだめらしい。初めて知ったよw
つーか、>>170の言う通りだよなあ…
176デフォルトの名無しさん:2008/04/17(木) 02:46:05
x += (x >= 0) * 200 - 100;
こういう書き方が玄人の証と考えていた時期が俺にもありました。
177デフォルトの名無しさん:2008/04/17(木) 02:46:48
だいたいコードレビューでダメだしされます
178デフォルトの名無しさん:2008/04/17(木) 03:57:32
x += ((x >> 31) & -200) + 100;
179デフォルトの名無しさん:2008/04/17(木) 10:52:47
>>178
"Hacker's Delight"レベルなら許すんだがなあw
180デフォルトの名無しさん:2008/04/17(木) 11:09:53
プロジェクトで指定されてもいないのに、
妙に大仰なファイルヘッダ書くのは素人くさいなあと思う。
ずれまくりだとは思うがこんな感じ。

//----------------------------------------------------------------------------//
//                                      //
//  Sub System Name : Xxxxxx Module                     //
//  File Name    : Xxx_Main.h                      //
//  Engineer    : xxxxxxxx xxx                     //
//  Created Date  : yy.mm.dd                       //
//  Last Edit    : yy.mm.dd                       //
//  Revision    : nnn                          //
//  Description   : Xxxxxx Module Local Define              //
//                                      //
//  Copyright (C) by xxxxxxxxxx Co.,Ltd. All rights reserved.        //
//  Author xxxxxxxxxx Co.,Ltd.                       //
//  機密文書:永久  xxxxxxxxx Confidential  (Critical:Eternity)     //
//                                      //
//----------------------------------------------------------------------------//

日付やリビジョンを人手で入力してたり、
日本語でおkなのにもかかわらず微妙な「英語」で書きたがるのもお約束かなあ。
181180:2008/04/17(木) 11:26:37
今見たら、フッタにまでこんなのが書いてあった。

//----------------------------------------------------------------------------//
// 機密文書:永久 xxxxxxxxxx Confidential (Critical:Eternity) //
// この文書、図面、Source Code、及び、含有する全情報の所有権,著作権は //
// xxxxxxxxxxxxxx株式会社に属する。事前にxxxxxxxxxxxxxx株式会社の文書による //
// 許可無くして、xxxxxxxxxxxxxx株式会社の物品の製造以外の目的に、この図面、 //
// Source Codeを複写、複製及び使用してはならない。 //
// Copyright(c); xxxxxxxxxx Co.,Ltd. All rights reserved. //
// Use,duplication or disclosure restricted by the law & xxxxxxxxxx Co.,Ltd. //
//----------------------------------------------------------------------------//
// ****************************** [ XX_Common.h : EOF ] ******************************

別に法務部から何か言われたとか、上司から指示があったとか、
コーディング規約で決まってるとか一切なくて、本人の独断で入れたみたい。
こんなの書かなくても機密保持契約は有効だし、
会社の著作物であることは当然なんだけど、もしかしてわかってないのかなあ…
182デフォルトの名無しさん:2008/04/17(木) 11:32:24
>>181
あれこれ理由はなくて、書いた本人が単にそういう様式で書きたかっただけだろ?
「ぷれぜんてっど ばい おれ」みたいな感じで
183デフォルトの名無しさん:2008/04/17(木) 13:16:24
日本語の文中に、カタカナで書くのが普通な外来語を
英語表記で書くのってなんか馬鹿っぽいよね。<Source Code
自意識過剰な人なのかもな。
184デフォルトの名無しさん:2008/04/17(木) 14:29:44
ヘッダだけなら実害もないんだけど、そういうズレた自己アピールを成果物に盛り込みたがる奴は、
コードそのものでも>>176とか>>178みたいに「個性」を表現したがる。

そういう奴はコードレビューでいじめてやるのだが。
185デフォルトの名無しさん:2008/04/17(木) 14:43:22
>>176はともかく、>>178はイインジャネ?速いんだし。
もちろんコメントつけてわかりやすくしといた方がいいけど。

全くもって速度がどうでもいい場所で
そういうコードばっかり考えて時間無駄にしてるならともかく、
コンパイラが最適化してくれない部分を
そういうテクで補うクセが付いてる人って、俺は羨ましいけどなぁ。
自分はなかなか思いつかんし。

>>178みたいなテクを考える人が減ってくのはちょっと寂しい。
186デフォルトの名無しさん:2008/04/17(木) 14:50:57
>>184
もしかして逆アセンブルとかしてデバッグできない人?
すべてのケースで、またすべてのコンパイラで成り立つか分からないが、
多くの場合3項演算子使った最適化に有利。
そんなこと知らないとしたら、>>184みたいな人間にレビュー付き合わされる人間て可哀想。
187デフォルトの名無しさん:2008/04/17(木) 14:51:51
>>185
真偽値を1,0と決め付けている点で五十歩百歩。技巧以前の問題なのだ。
188186:2008/04/17(木) 14:52:36
あ、すんません。
>>185さんが言うように、すべてのケースにおいて3項演算子使えなんてことは毛頭言うつもりはないです。
189デフォルトの名無しさん:2008/04/17(木) 14:59:41
>>178もどうかしかし
符号付きなら論理シフトになるか算術シフトになるか決まってないし
32ビットと決め打ちだし、そもそも普通のif文のほうが早い可能性もあるし
190デフォルトの名無しさん:2008/04/17(木) 15:28:27
>>187
う?178のどこに真偽値が?
まぁどっちにしても環境を限定した書き方だから
処理系をまたぐであろうプコードでそんなの書けないだろうけど。
191デフォルトの名無しさん:2008/04/17(木) 15:28:58
×プコード
○コード
orz
192デフォルトの名無しさん:2008/04/17(木) 15:40:06
おまいら、アクロバティックな記述もいいが、オブジェクトの解放をしてない、なんてのもポイント高いですよ。
「システムを運用しているうちにサーバの応答が遅くなり、しまいには無応答になる。サーバを再起動すれば治るが、
数日でまた応答しなくなる」というクライアントの訴えを受けてサーバを調べた俺が見たものは……
メモリを埋めつくす数十プリニウスものexcel.exeだった。
193デフォルトの名無しさん:2008/04/17(木) 15:53:59
三項演算子が「禁止」なのは、許可すると技巧に走るバカがいるから
三項演算子自体の可読性も性能も別段悪くないんだが…
194デフォルトの名無しさん:2008/04/17(木) 16:22:18
>>185
>速いんだし。
x>>31 が abs(x) より速いという確証があるのか?
>全くもって速度がどうでもいい場所で
速度が問題になる箇所ならインラインアセンブラ使えって話だ。

>>187
>決め付けている点で
関係演算子の結果は、そう決まっている。
>>189
>論理シフトになるか算術シフトになるか決まってないし
こっちは処理系定義なんで、移植する気がないなら問題にはならない。
まあ個人的には、どっちもキモいな。
195デフォルトの名無しさん:2008/04/17(木) 16:24:50
abs(x)使うとどう書けるの?
196194:2008/04/17(木) 17:47:52
abs(x)関係ない。すまん、読み違えてた。
元の>>178のコードだとふつーにifか三項演算子だ。
197デフォルトの名無しさん:2008/04/17(木) 17:53:22
185だけど、論理式+乗算(>>176)よりはシフト+ビットごとのAND(>>178
の方がさすがに速いだろうと思ったんだけど。違うの?
高速化に関しては初心者だけどさ。

>速度が問題になる箇所ならインラインアセンブラ使え
そらそうだろうけど、ゲームなんかだと毎秒30〜60回実行されるコードが
何万行とあるじゃん。チリも積もればなんとかで、手軽に条件分岐を減らせるなら
減らした方がいいと思うけど。俺の場合は上にコメント書く。

abs(x)使うやり方は気になるw まさか((x - abs(x)) & -200)とか?
198197:2008/04/17(木) 17:56:18
ぶw すれ違いだし最後の式おかしいし・・・
なんかいけそうな気もするけど無理か。スレ汚しスマソ
199デフォルトの名無しさん:2008/04/17(木) 21:07:25
もっと時間食ってるコードが絶対あるから、
簡単な計算は可読性重視、速度無視
200デフォルトの名無しさん:2008/04/17(木) 21:25:48
名前空間が分かれてるのにくべつ用のプレフィックスとか付ける
struct Hoge {
  int hoge_xxx;
  int hoge_yyy;
  int hoge_zzz;
};

struct tmとかCの標準ライブラリでもあるけど。
201デフォルトの名無しさん:2008/04/17(木) 21:35:16
配列とかで大量に使うならともかく、ローカルのワークに使う変数とか、引数なんかでshortを使ってるやつ。
202デフォルトの名無しさん:2008/04/17(木) 21:45:16
>>200
これは俺もよく見る。そのたび同じことを思う。
203デフォルトの名無しさん:2008/04/17(木) 22:23:48
なんで>>169と同じ事を書いてんの
スルーされたから?
204デフォルトの名無しさん:2008/04/17(木) 22:34:52
コピペによる予想外の冗長さを身をもって表現してくれたんだよ。
205側近中の側近 ◆0351148456 :2008/04/17(木) 23:06:24
(っ´▽`)っ
処理時間をどうこう言ってる人がいるが、
保守性、可読性を優先させたほうがいいでしょう。
処理時間をどうこう言うなら、目標時間を定めてから。
1秒を0.95秒にしたところでユーザに喜ばれるだろうか?
こう言うと、
ちりも積もれば山となる、処理時間だって言える
ソースコード全てにおいて、スピードを考慮すべき
と答える人がいるが、
実は、ソースコードの5%が処理時間の95%を占めるという研究結果がある。
つまり、闇雲にスピードを追求してもあまり意味が無いってことだ。
むしろ、スピードを追求した結果、
保守性が低くなるどころがバグ満載では、本末転倒である。

(っ´▽`)っ
処理時間と保守性、可読性についてもっと知りたい、考えたい人には、
コードコンプリート下巻をお勧めしよう。
206側近中の側近 ◆0351148456 :2008/04/17(木) 23:11:32
(っ´▽`)っ
コードコンプリートは上巻を読まないと下巻は理解しづらいかもしれないね☆
上下巻併せて12,810円です。
上下巻ともに、広尾の都立中央図書館の1階開架に置いてあるようです☆
207側近中の側近 ◆0351148456 :2008/04/17(木) 23:13:39
(っ´▽`)っ
っていうか、名著中の名著だから、ここの人たちはみんな読んだことがあるんだろうね☆
(っ´ω`)っ 出しゃばってごめんね、いきててごめんね、
208デフォルトの名無しさん:2008/04/17(木) 23:18:31
>実は、ソースコードの5%が処理時間の95%を占めるという研究結果がある。

観念的な空論をとなえるのをやめてちゃんとプロファイルをとれば、
こんな流言に左右されずに適切な最適化を実施すること(あるいは実施しないこと)ができる。
ところで漏れが組んだシステムで↑みたいな極端な例は殆ど無かったなぁ。
実はかなり特殊な領域を対象にした研究なんじゃないだろうか。
209デフォルトの名無しさん:2008/04/17(木) 23:23:34
リファクタリングの本だとたしか10%と90%って数字だったな。
まあなんにせよ速度の最適化にはまず測定からだ。
210208:2008/04/17(木) 23:31:49
>>208
ちょっと前の俺に反論。
高速化したい対象だけ注視しないで、UIやらなんやらを含む全コードを見れば
やっぱり極々一部が大半のCPUパワーを使っているような気がするぞ。
211デフォルトの名無しさん:2008/04/17(木) 23:32:10
//Author ああああ

毎度、毎度ファイル先頭に1行
ってなんだよやめてくれよw
212側近中の側近 ◆0351148456 :2008/04/17(木) 23:33:18
(っ´▽`)っ
こういう感じだね☆

処理時間の目標の設定(Plan)

測定(See)
↓↑
処置(Do)
213デフォルトの名無しさん:2008/04/17(木) 23:33:19
>>184
これ書いた人、ローカル変数の頭に全部"the"つけてるんだよね。こんな感じ:

#define UC unsigned char
#define CLEAR 0
static void Xxx_YyyClear( UC inXxxYyyName )
{
  UC theXxxLocalYyyNameNo = CLEAR;

  theXxxLocalYyyNameNo = inXxxYyyName;
  xxxGlobalInfo[ theXxxLocalYyyNameNo ] = clearXxxYyyyInfo;
}

強烈でしょw 固有名詞は伏せたけど、実在のコード。
補完機能付きのエディタ使ってないのに、
使い捨てのローカル変数にこんな長い名前つけてて、なんともご苦労様なことで…

あ、関数名が(動詞+目的語ではなく)目的語+動詞になるのもへたくそっぽくない?
214側近中の側近 ◆0351148456 :2008/04/17(木) 23:39:17
(っ´▽`)っ
で、コードコンプリートってどうなの?名著なん?
215デフォルトの名無しさん:2008/04/17(木) 23:40:09
一番気になったのはこれだ
#define UC unsigned char
216デフォルトの名無しさん:2008/04/17(木) 23:45:54
>>203
ネタ帳から貼ったの忘れてたよ。
217デフォルトの名無しさん:2008/04/17(木) 23:51:58
>>215
名前もあれだけど、なんでtypedefにしないんだ。
218デフォルトの名無しさん:2008/04/18(金) 00:02:48
>>213
>補完機能付きのエディタ使ってないのに、
こういう人たちは補完を使わない=出来る人間だと思ってる節がある。
全員分IDE買ってんのに「自分はEditor派なんで」。

・・・しかも当然遅い。
219デフォルトの名無しさん:2008/04/18(金) 00:11:02
>>215
実際にはそれはプロジェクトのヘッダファイルに入ってるんで、
それはまた別の困ったちゃん。ちなみに>>171w

まあ、typedef知らないんだろうと思うよ。
そういえばconstやstaticも使ってなかったな。
220デフォルトの名無しさん:2008/04/18(金) 00:13:34
>214
絶対読まなきゃ、というほどではないにしろ、読んでおくほうが望ましい。
ちゃんとわかってて読めばいい本ですよ。
221デフォルトの名無しさん:2008/04/18(金) 00:22:37
なんか急にレベルが下がったな
女の陰口のようだ
222デフォルトの名無しさん:2008/04/18(金) 00:34:52
とあるヘッダファイルから。

  #ifdef  GLOBAL_VALUE_DEFINE_XXX_COMM
    // グローバルを作る
    #define  GLOBAL_XXX        // GLOBAL→空白に変換
    #define  GLOBAL_XXX_VAL(v) =(v)  // GLOBAL_VAL(数値)→(数値)を設定する
  #else
    // グローバルを使う
    #define  GLOBAL_XXX extern     // GLOBAL→externに変換
    #define  GLOBAL_XXX_VAL(v)     // GLOBAL_VAL→削除する
  #endif

GLOBAL_XXX SomeStructAaa   varAaa;
GLOBAL_XXX SomeStructBbb   varBbb;
GLOBAL_XXX SomeStructCcc   varCcc;
...

ある意味懐かしい感じがする。
223デフォルトの名無しさん:2008/04/18(金) 00:50:08
なぜかcaseラベルのある行だけ複数の文を書く人がいる。

switch(xxx) {
case XXX: var1 = ...; var2 = ...; break;
case YYY: var1 = ...; var2 = ...; break;
case ZZZ: var1 = ...; var2 = ...; break;
}
224デフォルトの名無しさん:2008/04/18(金) 00:56:17
>>222
何でもかんでもって感じで多用されてたらうざいけど、使うこと自体は別にいいかなって思う。
それよりもプリプロセッサのネストが気になるw
225デフォルトの名無しさん:2008/04/18(金) 01:02:16
多次元配列の定義で、最初のデータを書き終わるまで改行してくれない。

struct Xyz fooBarBaz[DIM_XXX][DIM_YYY][DIM_ZZZ] = {{{{1,2,3},
                           // 中略
                           {7,8,9}},
                           // 数十行くらい続く
226デフォルトの名無しさん:2008/04/18(金) 01:12:33
構造体の(ポインタでない)メンバにconstとかvolatileがついてる。

struct Xyz {
    volatile int xxx;
    volatile int yyy;
    volatile int zzz;
};

つーか、文法的にはおkなのかなあ?
227226:2008/04/18(金) 01:24:55
う、POD型な構造体に限定したほうがいいかな。
それにしたってvolatileはないけど。
228デフォルトの名無しさん:2008/04/18(金) 01:27:21
>>223
縦に揃ってたら見やすいじゃん。
一貫性があれば異質な物にも気付きやすいし。
229デフォルトの名無しさん:2008/04/18(金) 01:30:46
>>226
const int * p;なら意味あるよん。
規格呼んだわけじゃないけどそれ以外は関数のexternと同じように無視される気がする。
230デフォルトの名無しさん:2008/04/18(金) 01:39:35
>>229
うん、だからポインタでないメンバと限定したわけだ。
(PODな)構造体のメンバがint * const memberとか宣言されてたらおかしいでしょ。
231デフォルトの名無しさん:2008/04/18(金) 02:38:10
>>223
case hoge: の後が一文(特に代入だけ)の場合、
俺も改行しないで列挙するなぁ。複数の文はさすがにアレだけど。
232デフォルトの名無しさん:2008/04/18(金) 03:14:02
縦に揃うときれいだからといって、同じ条件の三項演算子をズラズラ並べるのはカンベンして欲しい。
233デフォルトの名無しさん:2008/04/18(金) 08:14:11
おまえら正しくは条件演算子ですよ
三項演算子の一種であるので
C言語の場合ほぼイコールだけど
234デフォルトの名無しさん:2008/04/18(金) 08:23:39
>>230
>(PODな)構造体のメンバがint * const memberとか宣言されてたらおかしいでしょ。
別におかしくない。
初期化で値を設定して、その後変更するつもりがないメンバだろ?

235デフォルトの名無しさん:2008/04/18(金) 14:26:49
>>226
そのコードに必要だったかどうかは実物見ないとわからないけど、
一般論で言えば意味あるに決まってんじゃん・・・

割り込みで変更される可能性のあるメンバとか、
メモリマップトIOのアドレス範囲を構造体で定義するとか、
マルチスレッドで他スレッドからもアクセスされるフラグ的なものとか、
そんなときに使う。稀といえばまれか・・・
案外モノ知らない人多いんだな〜。

>>230
そのメンバには書き込んで欲しくないというときには、どう宣言せよと?
236デフォルトの名無しさん:2008/04/18(金) 18:35:17
>>235
226が遭遇した事例では、メンバに付けるよりも
構造体の変数を宣言するときにvolatile付けるほうが適切だったんだと思う。
237デフォルトの名無しさん:2008/04/18(金) 18:55:49
相手がvolatileを知らない前提で語ってるのがワラタ

volatile習いたてですか?
238デフォルトの名無しさん:2008/04/18(金) 18:59:58
>>226はどうみても volatile を知らないわけだが・・・
>つーか、文法的にはおkなのかなあ?
こんなこと書いてるし。

いや、「見かけたことはある」という程度には知ってるのか。
239デフォルトの名無しさん:2008/04/18(金) 19:13:37
Google code search で、struct volatile を検索すれば
カーネル内のコードやら aKode やら山ほど出てくるね。

なぜポインタにしか使わないとかそういう誤解があるんだろう。
240デフォルトの名無しさん:2008/04/18(金) 22:49:14
>>236
それだと今度は宣言する人が付け忘れちゃう可能性がなくない?
241デフォルトの名無しさん:2008/04/18(金) 23:14:01
>>235,237,238,239
ISO/IEC 9899:1999 6.7.3.3
The properties associated with qualified types are meaningful only for
expressions that are lvalues.
ISO/IEC 14882:1998 3.9.3.2
A compound type is not cv-qualified by the cv-qualifiers (is any) of
the types from which it is compounded.

つまり、メンバにいくらconst/volatileを指定しても、
構造体全体としては指定されてないのと同じということだ。

仮にメンバごとにアクセスする時だけconst/volatileの効果があるのだとしても、
構造体まるごとで操作した時にその効果がなくなるなら、全然意味ないじゃんって話。
で、全メンバに同じCV修飾子をつけるなら、構造体自体を修飾したほうが素直だろってこと。

もっとも、const/volatileは文法的には型に対する修飾子なので、
メンバの宣言に使っても文法上は間違いではない。
記憶クラス指定子のように、オブジェクトに対する指定を行なうものだと
考えるのがわかりやすいかな。

>>230,234
C++のクラスならおかしくない。が、そういうconstメンバはコンストラクタでしか
設定できないから、CやC++のPOD型で指定するのはおかしいって話。
242デフォルトの名無しさん:2008/04/18(金) 23:14:02
はじめてここにきたが
おれほとんどあてはまってる
みんなごめん
243デフォルトの名無しさん:2008/04/18(金) 23:21:26
>>241
メンバ変数にアクセスするときに効果があるんだったらそれでいいんじゃないか?
244デフォルトの名無しさん:2008/04/18(金) 23:31:12
だからstructまとめてコピーとかしたときにまずいって話でしょ
245デフォルトの名無しさん:2008/04/18(金) 23:47:46
コピーも結局、暗黙でメンバ変数にアクセスしてるんじゃないか?
246デフォルトの名無しさん:2008/04/19(土) 00:56:14
byte A = 0;
abs(A++);

行ったり来たり...
247デフォルトの名無しさん:2008/04/19(土) 01:00:05
>>108
行数が少なくなる事で各メソッドの全体像を一瞥しやすくなる。
文字数はあまり関係ない。新規行および不具合のある行についてのみ横方向に解析するので。
{}がないことで処理が1行しかないと判定できる。これもデバッガ使用、机上デバッグ、リファクタリング等の際に有効に機能する。

システム保守等で取り扱うコード量が増える程この手の基本的な書き方が重要になってくる。
248デフォルトの名無しさん:2008/04/19(土) 01:04:05
>>246
これは何?
意味分からない
249デフォルトの名無しさん:2008/04/19(土) 01:20:45
int a = 0; for (;;) a = abs(--a);
250デフォルトの名無しさん:2008/04/19(土) 01:33:58
>>247
>{}がないことで処理が1行しかないと判定できる。
{}が無いのにうっかり処理を2行書いてしまった部分を見逃す危険性は無い?
251デフォルトの名無しさん:2008/04/19(土) 02:03:55
for ();
このセミコロンは下に打っておかないと
1行追加するとき見逃す可能性があると思う
for ()
 ;
こんな風に
252デフォルトの名無しさん:2008/04/19(土) 02:22:23
>>250
処理をうっかり2行書いてしまった部分は変更を加えたのだからテスト対象になる。
また見逃してしまうようではシステム保守を担当できるスキルまで達していない事になる。
そもそも局所的にしかコードを把握していないようではシステム保守を任せることができない。
253デフォルトの名無しさん:2008/04/19(土) 02:50:49
>また見逃してしまうようではシステム保守を担当できるスキルまで達していない事になる。

おまえはわかってないな
そういう奴が触る可能性を考慮して書くんだよ

一生そのプログラムの保守をする気があるとか、趣味でやってるとか、書き捨てなら話しは別だけど
254デフォルトの名無しさん:2008/04/19(土) 02:56:41
>>253
わかってないのはおまえだよ。
そういう奴を育てる事も考慮して書くんだよw
ゆとりをもって取り組もうな。
255デフォルトの名無しさん:2008/04/19(土) 03:03:52
その発想はなかった
保守担当が自分の部下ならそうするけど・・・
板違いになりそうだからやめとくか
256側近中の側近 ◆0351148456 :2008/04/19(土) 03:21:19
>>252
(っ´▽`)っ
プロジェクトにはスキルの高い人もいれば低い人もいる。
今はスキルの高い人がいるとしても、将来はどうだかわからない。
プロジェクトにスキルの高い人がいるとしても、その人が保守を担当するとも限らない。
要員の都合でスキルの低い人に任せざるを得ない場合もある。
つまり、将来の保守は、どのようなスキルを持った人が担当するかわからない。
貴方が未来永劫保守が正しくなされるのを監視するのであれば問題ないが、
貴方はいつかは退職するでしょう?
貴方がいなくなったとき、保守はどうなるのかな?
257側近中の側近 ◆0351148456 :2008/04/19(土) 03:27:00
>>254
(っ´▽`)っ
もし、その育てられた人が退職したらどうするの?
258デフォルトの名無しさん:2008/04/19(土) 03:58:02
>>256 >>257
まず処理をうっかり2行書いてしまった人とテスト対象を見逃してしまった人は違う人物となり得る。
つまりコードを変更する事とその変更を検証する事は別の事柄だ。
コードを変更する人は>>247等を考慮して作業にあたれば良い。
変更を検証する人はテストケース等でテスト漏れを防止すれば良い。

それでもミス等は発生し得るのだから検証する枠組みを強化すれば良い事になる。
仮に個人のスキルに委ねた検証の仕組みしか提供できないのであればそれはその企業体自体の問題である。
259デフォルトの名無しさん:2008/04/19(土) 07:28:09
>>249
a=a^1;
260デフォルトの名無しさん:2008/04/19(土) 08:38:35
>>258
> それでもミス等は発生し得るのだから検証する枠組みを強化すれば良い事になる。

検証だけちゃんとやればいいという素人くさい意見有難う。(w

俺は、検証もがんばるし、そもそもミスを発生しにくいようにしたいから {} は
省略しない。
261デフォルトの名無しさん:2008/04/19(土) 08:47:43
>>258
> それでもミス等は発生し得るのだから検証する枠組みを強化すれば良い事になる。

失礼なことお尋ねするようですけど、ちゃんとどこぞの会社で働いてらっしゃるんですよね?
ミスは発生しうるという考えが先行してるように見受けられますが、
なぜ、「ミスを起こさせないためにはどうするか」という発想に至らないのか不思議でなりません。
262デフォルトの名無しさん:2008/04/19(土) 08:48:35
他の人も触る可能性があるなら {} つけといたほうがいいと思う
263デフォルトの名無しさん:2008/04/19(土) 08:54:26
付ける付けないはそこまで重要じゃないだろ。
プロジェクトで統一されていることこそ重要。
{}付けるなら絶対にすべてに付ける。
{}付けないなら絶対にすべてに付けない。
264デフォルトの名無しさん:2008/04/19(土) 08:56:42
>>263
重要とかそういうことじゃなく、それは決まりごとっていうんだ。
朝から強烈な電波、お疲れさまです。
265デフォルトの名無しさん:2008/04/19(土) 09:14:53
>>263
すべてにつけないは無理だろう。
俺はすべっつけるけど。空文もな。空文の括弧には、意図した空文か判るようにコメント入れような。
266デフォルトの名無しさん:2008/04/19(土) 09:14:54
決まり事は重要だぞ。
似たような処理が統一されたスタイルで書かれていれば
何も考えずに理解できるし、違う書き方で書かれた場所があれば
そこが特別だということが分かる。
267デフォルトの名無しさん:2008/04/19(土) 09:19:44
決まりごとは守らなければならない、これあたりまえ。
おれは上で議論してるのは、なぜそれを決まりごとと決めなければならないのか、
そっちを議論してるんだと思ってたんだが?
268デフォルトの名無しさん:2008/04/19(土) 09:22:30
うちだと1行に収まる場合以外はブロック化だな。

亀だけど。
>>173
大手ドロップアウト組はそんなもん。
WebSite見るとその頓珍漢なコードを掲載している傍ら、野菜作ってたり実家の手伝いしていたり。
まともな仕事を受注できなくても危機感もなければ研鑽する気もないから酷いコードのままの罠。
269デフォルトの名無しさん:2008/04/19(土) 11:26:44

hoge(int aaa){

if(hogehoge(aaa)==-1) return -1

return 0;
}

見たいな感じでエラー処理したりしちゃう癖があるんだが
これは醜いのか?
270側近中の側近 ◆0351148456 :2008/04/19(土) 11:37:51
>>269
(っ´▽`)っ
C言語?それならエラー時にリソース解放するの忘れないでね☆
271デフォルトの名無しさん:2008/04/19(土) 11:57:11
「関数の出口はひとつにしろ」とか言う人もいるんだよなぁ

インデント深くなるし、わかりにくくなるから、エラー時はさっさとリターンしたいんだけど・・
272デフォルトの名無しさん:2008/04/19(土) 11:59:30
おれはエラー時はさっさとgotoしちゃいます。
273デフォルトの名無しさん:2008/04/19(土) 11:59:44
void someFunc()
{
if (error) goto Return;
...;
...;
Return:
;
}
274デフォルトの名無しさん:2008/04/19(土) 12:01:41
goto文は多重ループを抜けるときにだけ使えって教えられたから
275側近中の側近 ◆0351148456 :2008/04/19(土) 12:20:24
(っ´▽`)っ
そこでtry〜catch〜finally〜ですよ
276デフォルトの名無しさん:2008/04/19(土) 12:21:38
それはC++前提ね
277デフォルトの名無しさん:2008/04/19(土) 12:22:16
>>275
Cならどうしてる?
278側近中の側近 ◆0351148456 :2008/04/19(土) 12:28:08
>>277
(っ´▽`)っ
(っ´▽`)っも>>273に似たようなもんだが

void someFunc()
{
 /* 主処理 */
 if (error) goto Catch;
 /* 主処理 */
 goto Finally;
Catch:
 /* エラー処理 */
Finally:
 /* 終了処理 */
 return:
}
279側近中の側近 ◆0351148456 :2008/04/19(土) 12:29:41
(っ´▽`)っ
>>278だと、正常の場合でもエラーの場合でも
終了処理が確実に実行されるよね。
280デフォルトの名無しさん:2008/04/19(土) 12:30:28
Catch、Finallyなんて変なラベルは使わない(見たこともない)けど、同じだね。
281側近中の側近 ◆0351148456 :2008/04/19(土) 12:32:22
>>280
|▽`)っ
あえてラベル名は変えてある
(っ´▽`)っの正体がばれるから☆

|彡☆ サッ
282側近中の側近 ◆0351148456 :2008/04/19(土) 12:33:33
(っ´▽`)っ
>>278の手法って結構メジャーなのかな?
書籍とかであまり見ないから。
(っ´▽`)っが誰だか特定されちゃうと困るんだけどね。
283デフォルトの名無しさん:2008/04/19(土) 12:34:11
そんなもったいつけてどうすんのwww
どうせ、そんじょそこらのおっさんでしょ?プゲラッチョ
284デフォルトの名無しさん:2008/04/19(土) 12:34:15
コテうぜえ
285側近中の側近 ◆0351148456 :2008/04/19(土) 12:35:42
>>283
(っ`Д´)っ お・ね・え・さ・ん!!!
(っ´▽`)っは永遠の16歳だよ。美少女だよ☆
286デフォルトの名無しさん:2008/04/19(土) 12:39:04
お局さんに内部変換した。
貰い手がいないんなら、おれがもらってやるよwww
287デフォルトの名無しさん:2008/04/19(土) 12:42:12
でこの書き方はどうなんだ?
288デフォルトの名無しさん:2008/04/19(土) 13:04:31
>永遠の16歳
なんだ、永遠に女未満なのか。
289デフォルトの名無しさん:2008/04/19(土) 13:04:50
ま、いいんじゃね?一般的かどうかということになると、goto使わない派がそれなりに多い現状からすると
マイナー(ただしマイナーの中のメジャー)だと思うけど。
1行だけのブロックを{}で括らない職業プログラマは逝ってよし。
290デフォルトの名無しさん:2008/04/19(土) 13:11:18
>>289
考え方の問題だろうけど俺は使わん
291デフォルトの名無しさん:2008/04/19(土) 13:24:33
手元にソースのあるプロダクツをざっとみて確認してみた。
if で一行でも{}でくくってるか。

linux くくらない
postgresql くくらない
apache くくらない
vim くくらない
mozilla くくらない
sqlite 基本くくるみたいだけど、くくってないところもある
mysql くくらない

292側近中の側近 ◆0351148456 :2008/04/19(土) 13:39:09
>>289
>マイナーの中のメジャー
(っ´▽`)っは側近中の側近だよ☆
293デフォルトの名無しさん:2008/04/19(土) 14:13:01
>>291
オープンソースな人とと職業プログラマでポリシーが違うのは当たり前だから、
あまり参考にならない意見有難う。
294デフォルトの名無しさん:2008/04/19(土) 14:13:48
>>293
「と」 が余分だった... orz
295デフォルトの名無しさん:2008/04/19(土) 14:15:24
確かに開発ペース&品質なんかはオープンソース系の方が上だよな。

って事考えると職業プログラマってグダグダ議論するワリにアレだよな・・・。
296デフォルトの名無しさん:2008/04/19(土) 14:23:41
オープンソースの場合は納期もないし責任もないのでそれはまた違った形になってくるのだろう
297デフォルトの名無しさん:2008/04/19(土) 14:23:59
VC++ のランタイムのソースと、SunのJDKのクラスライブラリのソースはくくる派だな。

意外なことに eclipse はくくらない派だった。
Javaはくくる文化かと思ってたよ。
298デフォルトの名無しさん:2008/04/19(土) 14:24:48
ちなみに以下のコードはある環境下でバグになるって事を認知してる?
    if (a > 0) {
#define _DEBUG
printf("a = %d\n", a);
#endif
    }
299デフォルトの名無しさん:2008/04/19(土) 14:25:44
>>296
責任ないって言っても、バグっていいとか、保守性がわるくなってもいいとか思って、くくらないスタイルを
採用してるわけじゃないだろ。
300デフォルトの名無しさん:2008/04/19(土) 15:03:30
>>298
そりゃそんなとこでdefineしたらおかしくなるだろ
301デフォルトの名無しさん:2008/04/19(土) 15:04:50
>>296
納期があるから{}を必ずつけるのか。
俺には理解できない話だが、参考になったよw
302デフォルトの名無しさん:2008/04/19(土) 15:06:38
>>298
ていうか_DEBUGって何? NDEBUGではなくて?
そんな環境依存の話されてもわかんない。
303デフォルトの名無しさん:2008/04/19(土) 15:13:49
>>293
以前はクローズドで、後にオープンソースになったSolarisも、くくらない派だったよ。
304デフォルトの名無しさん:2008/04/19(土) 15:13:55
#ifdefだろ常考
305デフォルトの名無しさん:2008/04/19(土) 15:15:04
>>296
現実的な責任云々いいだすとオープンソースの方が責任重いと思うが、
web鯖にたとえるなら喪前はapache以上の普及率を誇る製品作ってるのか?
306デフォルトの名無しさん:2008/04/19(土) 15:16:58
307デフォルトの名無しさん:2008/04/19(土) 15:18:45
きっと296はWindowsOSの開発をしていてMSの社内ポリシーは{}を必ずつける、ってんだろ?w
308デフォルトの名無しさん:2008/04/19(土) 15:19:46
オープンソースと責任を議論する人って一体?
309側近中の側近 ◆0351148456 :2008/04/19(土) 15:29:11
>>288
(っ´▽`)っ
16歳の女の子といえば女子高生!
食べ頃じゃないのか?
310デフォルトの名無しさん:2008/04/19(土) 15:41:57
ああごめん。#ifdefの書き間違い。
    if (a > 0) {
#ifdef _DEBUG
printf("a = %d\n", a);
#endif
    }
    b = 1;
    c = 2;
これをリリースモードでビルドするとa > 0の場合にのみb = 1が動作する環境に遭遇したことがある。
使用していたコンパイラが空ブロックにNOPを生成しないタイプだったのが不具合の原因だった。
311デフォルトの名無しさん:2008/04/19(土) 15:45:27
書籍だと、

詳解UNIXプログラミング、UNIXネットワークプログラミング くくらない
EffectiveC++ くくらない
Effective Java くくらない
プログラミング言語 C++ くくらない
プログラミング作法 くくらない

CODE COMPLETE くくる (書籍中では、この件に関しては議論はしてない)
デザインパターン(GoF) くくる
312デフォルトの名無しさん:2008/04/19(土) 15:45:39
規格に準拠してないコンパイラなんてどうでもいいよ。
313デフォルトの名無しさん:2008/04/19(土) 15:45:51
俺は不要な{}はつけない派だが、
そんな処理系固有のバグを得意そうに指摘しても意味がないと思うぞ。
314デフォルトの名無しさん:2008/04/19(土) 15:48:10
紙媒体を引き合いに出されても困るんですけど。
よく「紙面の都合上…」ってをみるでしょ?
315デフォルトの名無しさん:2008/04/19(土) 15:49:44
でもそういうバッドノウハウとして「{}をつけるべき」とか言ってる奴はいるかもな。
もはや常識であるdo{...}while(0)を知らずに

#define FOO(x) func1(x); func2(x)

みたいにして、痛い目にあったとか。
316デフォルトの名無しさん:2008/04/19(土) 15:53:08
> これをリリースモードでビルドするとa > 0の場合にのみb = 1が動作する環境に
> 遭遇したことがある。

今時のコンパイラならリリースビルドだと普通 if() 分もろとも省略すると思うが。
どんだけしょぼいコンパイラなんだ?

# つーか、コンパイラのバグ回避はまた別の話だろ。
317デフォルトの名無しさん:2008/04/19(土) 15:53:45
>>310
その情報って{}を付けるか付けないかと全く関係ないよね。
何が言いたいの?
318デフォルトの名無しさん:2008/04/19(土) 15:55:06
>>316>>317
もう触れないであげて。彼はいま自分の若さを再確認してるところだから。
319デフォルトの名無しさん:2008/04/19(土) 15:56:45
>>314
とりあえず第三者が検証可能だから。
上のほうの「自分の経験では」とかだとアレだけど。

まあ、チョイスも偏ってるしあくまで参考までに。
320315:2008/04/19(土) 15:56:50
おっと、do{...}while(0)だって立派なバッドノウハウだな < 自己ツッコミ

だが、へぼいマクロのために必ず{}で囲うべきだと強弁するなら、
そっちのほうがよほどワースノウハウというものだ。
321デフォルトの名無しさん:2008/04/19(土) 16:14:16
>>317
if (a > 0) {
}
b = 1;
c = 2;
をコンパイルすると
if (a > 0)
    b = 1;
c = 2;
と同じ挙動になったという話なだけ。
あくまで「ちなみに」レベルの話。
322デフォルトの名無しさん:2008/04/19(土) 16:18:44
なんでそんな関係のない話を得意げに語るの?
323デフォルトの名無しさん:2008/04/19(土) 16:35:47
>>309
体だけでしょ。心も知性も女未満。
324デフォルトの名無しさん:2008/04/19(土) 17:04:02
Cは「プログラマは無謬」という前提で設計された事を
認めない(/知らない)人が多いところだね。

冗長な記述をいくら推奨しても「歪む」とは思わないの?
325デフォルトの名無しさん:2008/04/19(土) 17:08:26
>>324
dmrはそんなこと言ってなかったよ。
326デフォルトの名無しさん:2008/04/19(土) 17:09:02
〜〜ことを認知してる?
なんて偉そうに書いてるから俺も気になったじゃまいか。
ifステートメントは直後の1文(セミコロンが1つ見つかるまで)、
もしくは直後の1ブロック?({}で囲まれた部分)までであるというのは
多分CでもC++でも標準規格ではっきり決まってることだと思うんだが、
その程度の仕様も守れないクソなコンパイラのアホなバグを
なぜ知ってなきゃならんのだw
技術者が信頼できない道具なぞ使うなと思うし、
使わなきゃならないならその環境が諸悪の根源なだけだろう。
327デフォルトの名無しさん:2008/04/19(土) 17:12:21
本来であれば>>315のマクロ記述の方が不具合なのにそれを隠蔽してしまう「必ず{}で囲うべき」という思想がヘタの証。
>>321も最初から{}を省略する書き方であれば遭遇しない不具合だし。
328デフォルトの名無しさん:2008/04/19(土) 17:14:47
プロトタイプ宣言を書くのはいいんだが、
仮引数を型だけ書く中途半端に古いスタイル。

int foo(int, int);

わざわざ仮引数名だけを消してて、ご苦労様と言いたくなる。
Quick-CとかMS-Cあたりの時代から進化していないらしい。
329デフォルトの名無しさん:2008/04/19(土) 17:16:25
>>324
設計者の意図がどうあれ、そんなことを理解 { しない | できない }
奴等に仕事させないといけないので、{} は必須。

そう言うお仕事もあるってだけのことだ。

>>326
アホに構うな。

そこにしか突っ込めないなら、止めやしないが。
330デフォルトの名無しさん:2008/04/19(土) 17:26:54
>仮引数を型だけ書く中途半端に古いスタイル。
はぁ? 古いってどういう意味? プロトタイプ宣言は昔からパラメータ名を書いても書かなくてもいいんですが。
ついでに言えば、C++の場合は実体定義のときも省略できますね。
331葉猫 ◆Jz.SaKuRaM :2008/04/19(土) 17:36:46
プロトタイプの引数に変数名入れるのは素人っぽいからヤダ
332デフォルトの名無しさん:2008/04/19(土) 17:40:31
>>330
うんうん、そうだよね。文法的には正しいよね。
わざわざ情報量落してるあたりが馬鹿っぽいということとは無関係だもんね。
333デフォルトの名無しさん:2008/04/19(土) 17:42:57
>>331
と考えてしまうところがヘタレな証拠
334デフォルトの名無しさん:2008/04/19(土) 17:43:21
>>330は返り値がintの関数を定義するとき型名を書かないらしい。
335デフォルトの名無しさん:2008/04/19(土) 17:44:28
それはc++とc99ではできなくなったはず
336デフォルトの名無しさん:2008/04/19(土) 17:45:05
Cはプロトタイプと本体の定義で、名前が違っていてもエラーにならんからね。
書く人にやめろとは言わないけど、俺も書かない。

void func(int x, int y);

void func(int y, int x)
{
・・・
}

337デフォルトの名無しさん:2008/04/19(土) 17:47:45
どっちかに統一してあればどっちでもええやん
#返り値がintの関数云々はともかく
338デフォルトの名無しさん:2008/04/19(土) 17:49:29
引数名は省略できても書いた方がいい。
339デフォルトの名無しさん:2008/04/19(土) 17:50:20
>>336
それは仮引数名の命名がおかしいだけであって、
仮引数名をつけない理由にはならないんだが。
340デフォルトの名無しさん:2008/04/19(土) 17:53:29
>>339
引数に名前があっても、信用できるわけじゃないしって話。
341デフォルトの名無しさん:2008/04/19(土) 18:29:52
コメントだって信用できないから、書かない方がいいって言う人?

# 書いてない方がマシなコメントもあるけどさ。
342デフォルトの名無しさん:2008/04/19(土) 19:36:10
全ての文にコメントをつけろって会社で働いたことがあったが、あれは地獄だったな。
343デフォルトの名無しさん:2008/04/19(土) 19:47:37
>>342
俺にも覚えがあるな。こんなコメントが蔓延してなかったか?

// ほにゃらら履歴を走査する@
// ほにゃらら履歴を走査するA

ちなみに、そのプロジェクトにはコメントの体言止め禁止という不可解な規約もあった。
344デフォルトの名無しさん:2008/04/19(土) 20:31:29
コメント等の説明文に関しては「…される」じゃなく「…する」と表現しなければいけない等のルールにも出くわした事もあるな
上のを例にすると「// ほにゃらら履歴を…に走査させる」はNGとか
345デフォルトの名無しさん:2008/04/19(土) 20:44:21
コメントは日本語と英語を併記するって所もあったな。
めんどくさいからコメントはなるべく書かないようにしてた。
346324:2008/04/19(土) 22:20:19
>>329
お気の毒です(笑)。いや、それでも。
それは「仕事でやる場合、そういう{指導|規約}が必要になる」
という事実を表明なさっているだけに思えますが。
#スレ違いと考えたら駄目ですかね
347デフォルトの名無しさん:2008/04/19(土) 22:32:09
>>335
化石プログラマにはC++やC99なんて存在しないのも同然。

>>331
変数名(笑)
素人臭さを演出して皮肉っているんですね。わかります。
348デフォルトの名無しさん:2008/04/19(土) 22:43:36
> 仕事でやる場合、そういう{指導|規約}が必要になる
> という事実を表明なさっているだけに思えますが。

まさにそうだが?

>>346 で何を言いたいのかよくわからん。

スレチだと考えるならそう考えておけばいいと思うけど、できたら
今後この手の話題にレスする時は「仕事以外では」と明記してもら
えると心置きなくスルーできるので助かるんだが。
349デフォルトの名無しさん:2008/04/19(土) 22:51:44
まぁこの手のくだらん制限がかかるのは大体仕事絡み
350デフォルトの名無しさん:2008/04/19(土) 22:57:42
>> 仕事でやる場合、そういう{指導|規約}が必要になる
>> という事実を表明なさっているだけに思えますが。
>まさにそうだが?

正直、極一部のヴァカの為にヘンテコなルールを導入する組織もどーかと思うが。
351デフォルトの名無しさん:2008/04/19(土) 22:59:33
ごく一部というか毎年一定の割合で入ってきたり、派遣されてきたり
352デフォルトの名無しさん:2008/04/19(土) 23:03:39
解っていた事ではあるがオープンソースが責任やら納期やらの話で{}を省略しているのではなくて、
仕事でやっている連中はレベルが低すぎるから糞ルールを導入せざる得ない。
とハッキリ言えばいいのになぁ。

なんかヘンテコなプライドがあるんだかないんだが。
353デフォルトの名無しさん:2008/04/19(土) 23:14:51
>>350
> 正直、極一部のヴァカの為にヘンテコなルールを導入する組織もどーかと思うが。

じゃあもっといい方法があるのか?

---
> 仕事でやっている連中はレベルが低すぎるから糞ルールを導入せざる得ない。
> とハッキリ言えばいいのになぁ。

>>256, >>329 に書いてあるのに理解できてない >>352 に言われても...。
354デフォルトの名無しさん:2008/04/19(土) 23:15:01
スレの主旨や話題にケチつける気はないんだが(これは>>348に対する皮肉でもあるがw)
どーも感心するほどの話が出てこないなぁとオモタ。
自分は現役離れてフリーターやりながら作品作ってる身分なので偉そうなことは言えないが、
「会社の超下手糞なスタッフが読んでもわかるように」、みたいな今の日本特有?の
IT土方的環境を前提にしたら話がおかしくならんか?

ヘタなコードか上手いコードか、ってのは
仕事、趣味、オープンソース、個人グループ、などに関わらず議論できることであって、
何でもすぐ自分の立場だけで考えようとするのはアホだしプログラマとしても才能無いぞ。
クソルール作ってる連中と大して変わらんしな。
355デフォルトの名無しさん:2008/04/19(土) 23:15:54
逆にオープンソースのように、ちゃんとみんなでソースをチェックしてやれば
そんな些細なミスなんて問題じゃなくなるってことじゃねえか?
ソースレビューすればすぐ見つかるようなことだろ。
356デフォルトの名無しさん:2008/04/19(土) 23:26:57
> 何でもすぐ自分の立場だけで考えようとするのはアホだしプログラマとしても才能無いぞ。

自己紹介乙。(w

>>348 にも書いたが、できたら今後コテ付けてくれ、スルーするから。
357354:2008/04/19(土) 23:29:03
何か勘違いしてるようだが346は俺じゃないよ。
358デフォルトの名無しさん:2008/04/19(土) 23:29:17
>>355
まあ、それはそうだが、無駄な手間が増えるってことだからな
359デフォルトの名無しさん:2008/04/19(土) 23:41:59
>>357
それはすまんかったが、どちらにせよ「仕事以外の話」と言うならわかるように
書いてくれと言うだけのこと。

> 仕事、趣味、オープンソース、個人グループ、などに関わらず議論できること
> であって、

とてもそんな議論ができるとは思えないから。

# 少なくとも「趣味」が入ったら何でもアリだろ?
# 七行プログラムみたいのが上手いコードと言い張る奴もいるだろうし。
360デフォルトの名無しさん:2008/04/19(土) 23:53:33
>とてもそんな議論ができるとは思えないから。
そう?>>7とか>>39とか>>124とかがまさにそういう議論(というより意見か)
だと思うんだけど。
># 少なくとも「趣味」が入ったら何でもアリだろ?
># 七行プログラムみたいのが上手いコードと言い張る奴もいるだろうし。
短いプログラムとしてなら上手いだろうし、可読性の点では最悪だろう。
それは趣味プログラマだからどうこうっていう話じゃなくね?
361デフォルトの名無しさん:2008/04/20(日) 00:38:37
>>124 は「メモリきちきちの環境」とかだとむしろ推奨とか言い出す奴がいても
おかしくないと思う。

> 短いプログラムとしてなら上手いだろうし、可読性の点では最悪だろう。

{} にしたって、文法上不要なところは省くと短いプログラムとしては上手いだ
ろうし、(未熟なプログラマに対する) 配慮と言う意味ではは劣るだろ?

それを、トータルでどっちが上手いと言う議論をしても、短いプログラムと未熟
なプログラマに対する配慮の重要度が「仕事、趣味、オープンソース、個人グ
ループ、など」では違うから、結論なんかでないと思うよ。
362デフォルトの名無しさん:2008/04/20(日) 00:49:34
>>361
!?
それは逆アセンブルした結果をみて言っているのか?
363デフォルトの名無しさん:2008/04/20(日) 00:56:42
>>124 と関連するが、自動変数のスコープを限定するためだけの {} はあり? なし?
364デフォルトの名無しさん:2008/04/20(日) 00:58:53
>>362
お前は何を言ってるの?
365デフォルトの名無しさん:2008/04/20(日) 00:58:54
>>361
コンパイラの最適化時の賢さにもよるだろうけど、ローカル変数なら
別に使いまわしても使いまわさなくても吐くバイナリは同じだと・・・・
思ってるんだけど違う?w
>結論なんかでないと思うよ
いやそれでいいと思うんだけどなぁ。
ifステートメントとかの{}は、誰かも言ってたけど会社のコーディングルールで
決まってれば従えばいいし、一貫させることの方が重要だから
俺としては”さっさと終わっていい話題”だと思った。w 
「このコードダメだよね?」「このコードうまいよねー?」みたいな話は
1.美的感覚を元にして話す
から面白いんであって、ここはム板なんだし
2.愚痴っぽいネガな理由持ち出してコーディング規則を語る
のは聞くに耐えんなぁ、と思っただけ。
音楽を聴くとき、あんたはアーティストがいかに不遇な環境で頑張ったかで良し悪しを決めるのかい?
先ほど書いた通りスレ主旨や流れにケチつけるのもアレだから、このくらいにしときまw
366デフォルトの名無しさん:2008/04/20(日) 01:00:48
変数使いまわして意味があったのはインタープリタのBASICだけだと思ってたけど
367デフォルトの名無しさん:2008/04/20(日) 01:26:49
>>365
> いやそれでいいと思うんだけどなぁ。

だったらスルーしとけばいいんじゃないかな。

> 1.美的感覚を元にして話す

その美的感覚は人によっていろいろ違う。

君には、「愚痴っぽいネガな理由」としか思えなくても、他の人には
美的要素として重要なことだってあるんだし。

> 音楽を聴くとき、あんたはアーティストがいかに不遇な環境で頑
> 張ったかで良し悪しを決めるのかい?

仕事ならそう言うこともあるだろうね。
368デフォルトの名無しさん:2008/04/20(日) 01:56:39
>>348=>>356=>>359=>>367??さっきから何様なの?
>その美的感覚は人によっていろいろ違う。
>君には、「愚痴っぽいネガな理由」としか思えなくても
>仕事ならそう言うこともあるだろうね。
なんていうか・・・色々と社会勉強してきてください;;;;
(ヒント:相対主義)
369デフォルトの名無しさん:2008/04/20(日) 03:02:08
くだらん事で必死だな
370デフォルトの名無しさん:2008/04/20(日) 03:58:45
上手なコード
ヘタなコード
fool proof なコード
のそれぞれに語る価値はあろうが、スレタイを前提とすると、このスレで"上手なコード"を語る意味はない。
であるからして"ヘタなコードだけどfool proofだから書かねばならぬ"というのを攻撃するのもスレ違いに思う。
"上手ヘタに関わらずfool proofであるべき"などと主張したい奴は別のスレを立てろ。
371デフォルトの名無しさん:2008/04/20(日) 06:52:53
仕事でヘタコードを強要させられている愚痴ならともかく
仕事でヘタコードを制定しているアフォが自己肯定する為にこのスレで我侭言っている
だけだもんなぁ。

一番議論を邪魔しているのが自分だと気づけっての。
372デフォルトの名無しさん:2008/04/20(日) 08:52:23
>>368-371
> だったらスルーしとけばいいんじゃないかな。
> だったらスルーしとけばいいんじゃないかな。
> だったらスルーしとけばいいんじゃないかな。
373デフォルトの名無しさん:2008/04/20(日) 10:54:09
なんでそんな3回も連呼するほど必死なん?
374デフォルトの名無しさん:2008/04/20(日) 12:35:18
むしろ下手なコードを奨励し、下手なコードを書く技術を向上させるための
議論をするスレだろ。
どうやったら上手に下手コードを実現するか。
さぁ議論再開。
375デフォルトの名無しさん:2008/04/20(日) 12:37:36
おいおいw
376デフォルトの名無しさん:2008/04/20(日) 13:02:55
>>373
今時必死か。

下手なレスの書き方を披露してるのか? (w
377デフォルトの名無しさん:2008/04/20(日) 13:51:03
ケンカはやめて(><)
378デフォルトの名無しさん:2008/04/20(日) 14:55:50
こういうのもヘタっぽい
if (b > c)
    a = b;
else
    a = c;
379デフォルトの名無しさん:2008/04/20(日) 15:20:35
結局「{}は仕事で絶対必要」クンが暴れているスレになったな。
380デフォルトの名無しさん:2008/04/20(日) 15:35:00
>>379とりあえず、職業プログラマにならないでね。
まわりの迷惑だからwww
381デフォルトの名無しさん:2008/04/20(日) 16:37:29
とりあえず漏れの会社は>>380の居るヘタコード強要会社ではないので安心だ。
382デフォルトの名無しさん:2008/04/20(日) 16:39:27
おれも>>381がいるトンチキ会社じゃなくてほっとしたよ。
383デフォルトの名無しさん:2008/04/20(日) 16:40:49
たぶん漏れの会社も>>380の居るヘタコード強要会社ではないみたいなので安心だ。
384デフォルトの名無しさん:2008/04/20(日) 16:47:11
囲わないと後から文を付け加えたときに囲い忘れるかもしれないなんて、
「条件式で誤って代入演算子を書いてしまう」以上にありえないことだと思う。
それと違って、囲うかどうかはどっちでもいいと俺は思うしコンパイラも警告出すことでもないけどね。

ところで、1文だけのとき、普段は省略するけど、if - elseでは気持ち悪いから両方を囲っているんだ。
if (...)
{
  /*複数文の処理*/
  hage;
  piyo;
}
else
{
  hoge; //1文だけの処理
}
そうしていたら、それで最近、常に囲うほうで統一すればいいような気がしてきた。
385デフォルトの名無しさん:2008/04/20(日) 17:04:49
囲い忘れたらインデントがずれるしね大体
386デフォルトの名無しさん:2008/04/20(日) 17:22:34
>>384
> 囲わないと後から文を付け加えたときに囲い忘れるかもしれないなんて、
> 「条件式で誤って代入演算子を書いてしまう」以上にありえないことだと思う。

だよね〜。




と、俺も思っていたが、実際にあるから怖い。

>>381 みたいな自信過剰の奴は時にとんでもないポカミスをするから、そう言う
奴をはじく意味でも彼等の言う「ヘタコード強要」は必須。
387デフォルトの名無しさん:2008/04/20(日) 17:28:53
1.1行で書ける/書くのが自然な時は囲まない
2.それ以外は囲む

これでやってる。でも1.の場合があまり無いから結果的に殆ど囲まないなぁ。
388387:2008/04/20(日) 17:29:47
1行ってのはifも含めてって事ね。
if(a) hogehoge;
389デフォルトの名無しさん:2008/04/20(日) 18:00:56
>>386
1行のifを中括弧で括るのがヘタコードだなんて誰も言ってないようなw
390デフォルトの名無しさん:2008/04/20(日) 18:07:45
>>388
大量に羅列する時などは一行に書いてしまうが、その時は {} で囲む。

正直、単発で一行にするのは勘弁して欲しい。
インデントがあれば、キーワードを見ずとも制御構造があることがわかるという利点がある。
また、デバッガで追いかける時に面倒くさいことになることがある。
391387:2008/04/20(日) 18:28:17
>>390
うん、だから1.はあんまり使わない。

それと>>387で全く逆の事言ってた。殆ど「囲む」の間違いね。
392デフォルトの名無しさん:2008/04/20(日) 18:33:19
前にも書いたと思うが、うちも>387と同様。
慣れた奴は書かなくてもいいと思うかもしれないが、
それを真似して慣れてない奴が間違うのが困るんだ。
393デフォルトの名無しさん:2008/04/20(日) 18:45:44
>>392
「間違えるから成長する」という考え方は?
394デフォルトの名無しさん:2008/04/20(日) 18:48:01
>>393
間違えて成長する奴なら、間違えなくても成長する。
間違えても成長しない奴は、いつまで経っても間違える。
395デフォルトの名無しさん:2008/04/20(日) 18:48:19
>>392
無いカスだから間違える
これ全世界共通の常識
396デフォルトの名無しさん:2008/04/20(日) 18:54:55
意味不明ww
397デフォルトの名無しさん:2008/04/20(日) 18:57:04
括弧で括ろうが括るまいとプログラムの変更箇所に対してテストしてれば
どっちでも問題ないと思うが「括弧で囲まないと困る」ってのはなんだかな?って感じだ。

「慣れてない奴が間違える」はコーディングルール以前に
品質を維持するルールが存在しないアフォ組織に思えるが。
398デフォルトの名無しさん:2008/04/20(日) 18:57:24
そんなところで間違って貰っては困る
399デフォルトの名無しさん:2008/04/20(日) 18:57:41
if (a != 0)
  a--; b = a;

みたいなのは紛れもなく糞
400デフォルトの名無しさん:2008/04/20(日) 19:01:09
糞と言うか見辛いだろうが、そこで修正間違えるヤツはかなりマとしての適正を欠いているとオモ
401デフォルトの名無しさん:2008/04/20(日) 19:03:55
>>399
こんなの見た日には、メーリングリストで晒し者したい気分
402デフォルトの名無しさん:2008/04/20(日) 19:05:25
if (a != 0)
  a--; b = a;
if (c != 0)
  c--, b = a;

どうぞ
403デフォルトの名無しさん:2008/04/20(日) 19:07:20
一応、こういうコード書いた奴を少し問い詰めたくなる罠

もしかしたら凄い理由があるのかも知れないし。
404デフォルトの名無しさん:2008/04/20(日) 22:37:58
成長しない見本 (w

>>397=>>258

同じ事を何回も書くんじゃねぇ。
405デフォルトの名無しさん:2008/04/20(日) 22:51:58
なにが言いたいのか解らんが日本語が不自由な人なんだろうか?
406デフォルトの名無しさん:2008/04/20(日) 22:54:56
たぶん、漏れのレスが絶対正義と信じて疑わない人なんだろ
成長しない人間にありがちな思考だ。
407デフォルトの名無しさん:2008/04/20(日) 22:59:20
>>378にもご意見くださいな
408デフォルトの名無しさん:2008/04/20(日) 23:00:05
プログラミングが好きでもないのに仕事で中途半端に高い立場になってしまって
毎日ム板でストレス発散してんのさきっと。
だから趣味グラマ=実力皆無、非営利のコード=無意味と決め付けてるのもうなずける。
自分が会社の外で勉強する気が無い(向上心がない)から他人もそうだと思い込んでるのだろう。
そらウンコルールも作りたくなるわw
409デフォルトの名無しさん:2008/04/20(日) 23:02:00
>>378
a = max(b, c);
a = b > c ? b : c;
の方がいいってこと?
どれでもいい気がしなくもないけどmax使った方が判り易いか。
410デフォルトの名無しさん:2008/04/20(日) 23:08:52
>>409
そうそう。元のコードだと最低でも3行に目を通さないといけないからヘタな書き方だと思うわけ。
この場合はa = max(b, c);が素直だと思う。実際のa, b, cはもっと長い変数名なんだから。
411デフォルトの名無しさん:2008/04/20(日) 23:14:00
しかし二つしか比較してないのにmaxってのもなぁ
412デフォルトの名無しさん:2008/04/20(日) 23:17:25
え?こういうの書かない?
a = max(a, 0);
413デフォルトの名無しさん:2008/04/20(日) 23:24:14
#define max(a, b) (a > b ? a : b)
414デフォルトの名無しさん:2008/04/20(日) 23:29:11
普通、static int max(int a, int b) {return a > b ? a : b;}じゃないのか?
415デフォルトの名無しさん:2008/04/20(日) 23:31:06
C++だとテンプレート版max()があったような。
416デフォルトの名無しさん:2008/04/20(日) 23:32:58
俺は統一されてるのが好きだけど{}囲ってるけど、どっちもでいいな。
強要されるのはごめんだが。

ところでこいつを見てくれ、どう思う?
if(isA){
 if(isB)
  if(isC)
   hoge1();
 else
  if(isD)
   hoge2();
}
417デフォルトの名無しさん:2008/04/20(日) 23:33:37
.NETにはEnumerable.Max<T>()が……
418デフォルトの名無しさん:2008/04/20(日) 23:35:18
>>416
構文解釈しにくいなあ
elseはどこにかかっているんだろう

でも俺は{}でくくるのを強制されるのはゴメンだね。
419デフォルトの名無しさん:2008/04/20(日) 23:35:38
>>416
レビュアーにケンカ売ってるのかな? とか
420デフォルトの名無しさん:2008/04/20(日) 23:36:20
>>416
プログラミング作法かなんかで見たような気がする
421デフォルトの名無しさん:2008/04/20(日) 23:40:56
>>416
そのインデントからすると単なるバグ。正しくはこう
if (isA)
 if (isB) {
  if (isC)
   hoge1();
 } else
  if (isD)
   hoge2();
422デフォルトの名無しさん:2008/04/20(日) 23:43:58
いや、実はインデントをミスしただけかもしれない
423デフォルトの名無しさん:2008/04/20(日) 23:45:31
>>416
Cだとelseって一番近いifにかかるよな?インデント間違ってないか?
424デフォルトの名無しさん:2008/04/20(日) 23:54:10
>>423
スレタイを読め
425デフォルトの名無しさん:2008/04/20(日) 23:59:21
>>424
と思った、ということじゃないのかな?
426デフォルトの名無しさん:2008/04/21(月) 00:04:24
>>424
お前さんのツッコミの意図がわからん。
427デフォルトの名無しさん:2008/04/21(月) 00:17:17
このスレも末期ですね
428デフォルトの名無しさん:2008/04/21(月) 00:19:52
スレ違いだけど、おれの場合はグローバル変数を使い始めたら
糞コード生産開始の合図だわ。。
429デフォルトの名無しさん:2008/04/21(月) 00:40:03
グローバル変数にはメリットもあるだろ。
430デフォルトの名無しさん:2008/04/21(月) 00:45:58
perlでクライアントの2chブラウザ作ったけど見たい人いますか?
4時間ほどで作りました
431デフォルトの名無しさん:2008/04/21(月) 00:48:17
日本語でおk
432デフォルトの名無しさん:2008/04/21(月) 00:48:28
別にいいです
433デフォルトの名無しさん:2008/04/21(月) 00:50:03
Pythonのお勉強 Part 25
http://pc11.2ch.net/test/read.cgi/tech/1206876081/
604 名前: デフォルトの名無しさん Mail: 投稿日: 2008/04/20(日) 20:46:14
perlで2chブラウザ4時間で作った〜

ボク厨房!Pythonスレで自慢してみたのに、
誰も食いつかなかったからこっちに来てみたよ!><
434デフォルトの名無しさん:2008/04/21(月) 01:12:30
なんか流れを見てみると、自動インデント機能を使ってない人多いのかね?
(ちゃんと文法まで解釈するやつね)

>>416とかみたいなのは打ち込んでいるうちにおかしいってわかるから、
入力の手間を省くためというよりは、文法チェックのつもりで使ってる。

だから、そういう機能がない環境のやつほど
{}使いたがらせるんじゃないかと予想しているんだけど、関係あるかな?
かく言う自分はEmacsメインで{}強制はバカっぽく見える派。
435デフォルトの名無しさん:2008/04/21(月) 01:17:56
一応確認するけど
ヘタだなと思ったコードを貼るのがこのスレの趣旨だよね?
まさかと思うけど>>374がこのスレの趣旨じゃないよね?
436デフォルトの名無しさん:2008/04/21(月) 01:29:19
>>1を読め
437デフォルトの名無しさん:2008/04/21(月) 01:57:32
>>435
374はネタだろ?
今までの流れからすると前者でおk
438デフォルトの名無しさん:2008/04/21(月) 03:05:22
前者ならマ板だろ。
>>374で桶。
ここは技術板だ。
439デフォルトの名無しさん:2008/04/21(月) 03:32:12
なんか、最近、技術って言葉を聞くとむなしくなる
440デフォルトの名無しさん:2008/04/21(月) 07:19:20
俺は直感で書くとこうかなあ。
少し BASIC っぽい?

if(式) 文; else 文;

if(式) 文;
else {
}

if(式) {
} else 文;

if(式) {
} else {
}
441デフォルトの名無しさん:2008/04/21(月) 07:34:19
それ珍しいなw
1つめはおいといて、個人的には
ifを囲うならelseも囲った方が、短くても同じ条件で分岐したものだと
認識しやすいと思う。
あと
} else {も、(賛否ありそうだけど)
}
else {
....
にした方が、行の最初に来るから認識しやすいかも?
442デフォルトの名無しさん:2008/04/21(月) 08:30:17
あとネタ半分だけど
VC使っててあらゆるインデントを消すツワモノが居たなw
「どうせ一緒なんだから消してもいいじゃんw」
とのことだった。その人は今はCOBOLerだが。
443デフォルトの名無しさん:2008/04/21(月) 09:57:28
変数名で悩まされるのはホント勘弁して欲しい。
int dynamic_static;
ってなんなんだよ・・・
一体何に使ってるのか気になってしょうがねえ。

444デフォルトの名無しさん:2008/04/21(月) 10:03:47
>>443
そいつ、おちゃめだな
445デフォルトの名無しさん:2008/04/21(月) 10:21:24
変数は大抵ローマ字で書いてる
int kao;
int me;
int hana;
みたいに
446デフォルトの名無しさん:2008/04/21(月) 11:10:33
FILE* fairu;
_Bool raito_huragu;
とか?
447デフォルトの名無しさん:2008/04/21(月) 11:12:37
int koreha_daijina_switch,tugini_daijina_switch;
float fudo_swith,syosuten;

死ねと思った
448デフォルトの名無しさん:2008/04/21(月) 11:14:52
>>447
ネタでなくそんなコーディングがあるとは、いやはや
449デフォルトの名無しさん:2008/04/21(月) 11:17:17
>>448
新人研修中で、実習させて提出されたコードの大半がこれ。
で極めつけが

課題.c 作成ファイル.doc <-Makefile

とかで渡してきやがった
文字コードがUTF-8(MAC)だし意味不明死ねと思った
450デフォルトの名無しさん:2008/04/21(月) 11:29:01
>>449
新人研修とはよかったじゃないですか
今後業務で同じことをしないよう指導できるいいチャンスじゃないかな、しかも効率よく
教官の腕が試されてると思って頑張ってくらはい
451デフォルトの名無しさん:2008/04/21(月) 12:27:15
>441
}
else {

は個人的には使わないなあ。

  }

だけの一行ってのは、俺にはどうも
if〜elseまで含めた、全体の終わりに見えてしまう。
452デフォルトの名無しさん:2008/04/21(月) 20:06:52

if(cond)
{ //...
//...
} else
{ //...
//...
}
453デフォルトの名無しさん:2008/04/21(月) 21:05:58
>>452
それ見たことある
454デフォルトの名無しさん:2008/04/21(月) 21:10:12
上のほうの#ifdefと同じで環境依存だけどVC8で

#ifdef _DEBUG
if( FALSE ) 〜;
#endif

上のthen行が実行されしまうんだ。

if( FALSE ) {
 〜;
}

と、括弧でくくればちゃんと機能するんだけどな。
#ifdefとifの組み合わせでバグる処理系って実は多いのか?
455デフォルトの名無しさん:2008/04/21(月) 22:22:22
関数を分けすぎるってのはどうなんだ?
俺2行以上でかつ同じことを二回書くことになったら
関数に分けるって考えかたしてるんだけども
これだと分割しすぎるような気がしてきた
456デフォルトの名無しさん:2008/04/21(月) 22:26:05
>>455
関数化って処理ブロックの名前付けという働きもあるから
適切に名前が付いてるならいいんじゃないかな。
457デフォルトの名無しさん:2008/04/21(月) 22:27:52
グローバル変数にすべきものってなんだ?
勝手に書き換えられると困るからなるべくグローバル変数にしないで、引数で渡すようにしてるんだが
458デフォルトの名無しさん:2008/04/21(月) 22:40:33
何階層もの関数を引数で渡していくのとグローバル変数使用とではどっちが見やすいだろうか。
グローバル変数といっても〜.cファイルの中だけで使うようにして他の〜.cでは使わないようにすれば
C++で言うところのメンバ変数みたいな感じで良いと思うんだが。
459デフォルトの名無しさん:2008/04/21(月) 23:35:03
それならstaticってつけるべ
460デフォルトの名無しさん:2008/04/22(火) 00:14:48
括弧の有無で問題が生じるなら。
それは括弧の有無自体が問題なのではなく、
関数の粒度が問題であると思うのだが。
461デフォルトの名無しさん:2008/04/22(火) 01:33:27
>>458
グローバル変数じゃないじゃん
広義のグローバル変数にはあてはまる?
462デフォルトの名無しさん:2008/04/22(火) 01:37:47
staticってつけたいけど、エラー時に変数ダンプしたい時にexternできなくなるからつけない・・・
ちゃんとつけてそのファイル内にダンプ処理書けばいいんだけなんだがめんどくさくって
463デフォルトの名無しさん:2008/04/22(火) 01:38:53
クラスにしておけばいいのに。
464デフォルトの名無しさん:2008/04/22(火) 06:57:20
*変数名が意味しそうな内容と実際に格納される内容が全く関係ない。あるいは単なる一時記憶になってる
465デフォルトの名無しさん:2008/04/22(火) 07:56:51
明解な変数名を付けて、名称通りの用途に使っておきながら、いつの間にかまるで違う用途に使っているとか、なかなかハイレベルなトラップだぜ。
レビュー前にコードを斜め読みして大混乱。
466デフォルトの名無しさん:2008/04/22(火) 08:21:10
>>462
アクセサつければ?
467デフォルトの名無しさん:2008/04/22(火) 08:50:43
Linuxならそんな問題起きないのにな。
ほんとWindowsは駄目だな。
468デフォルトの名無しさん:2008/04/22(火) 09:35:42
おいおい、Windozeプログラマがキれちゃうぞ(笑)
469デフォルトの名無しさん:2008/04/22(火) 12:07:33
>>465
プログラミング作法に似たようなのあったね。
コードを直したときにコメントを直すのを忘れて、コードとコメントが合ってない、とか。
470デフォルトの名無しさん:2008/04/22(火) 17:50:29
俺は分岐する際、エラー処理を固めるためにネスト深くしてるんだが不味いかな?
returnは必ず一箇所で行うようにしてたらそうなってしまったんだが
こんな感じ↓

if( ) {
 if( ) {
  if( ){
   if( ){
    //処理
   }else{
    // エラー処理;
   }
  }else{
   // エラー処理;
  }
 }else{
  // エラー処理;
 }
} else {
 //エラー処理
}
471デフォルトの名無しさん:2008/04/22(火) 18:04:08
Cではそうしていたけれど、他に移ったら例外処理があるから
そんなネストは要らなくなったし、returnを1ヶ所に拘る必要も失せた。
すれ違いすまん。
472デフォルトの名無しさん:2008/04/22(火) 19:21:14
>>471
Cでも呼び元でエラー処理すれば同じことじゃね
473デフォルトの名無しさん:2008/04/22(火) 19:25:02
if文でネスト深くなるのは、いいけど例外で深くなると見栄えも悪いな
まあ、別に悪くないけどさ

try{
 try{
  try{
   try{
    // 処理
   } catch( ) {
    ;
   }
  } catch( ) {
   ;
  }
 } catch( ) {
  ;
 }
} catch( ) {
 ;
}
474デフォルトの名無しさん:2008/04/22(火) 19:27:09
try{
    // 処理
} catch( ) {
    ;
} catch( ) {
   ;
} catch( ) {
  ;
} catch( ) {
 ;
}

これでいいだろ?
475デフォルトの名無しさん:2008/04/22(火) 21:00:20
>>470
判定と異常の位置が離れてしまって見難くならないか。 
どれとどれが対応してるのか探すのがまず大変そうだ。
途中のreturnがいやならフラグはどうだ。
もしくはエラーだけ関数分けるか。
void hoge()
{
 if(IsOk()) {
  //処理
 }
}
bool IsOk()
{
 bool isOk = true;
 if( ) {
  //エラー処理
  isOk = false;
 }
 中略
 if( ) {
  //エラー処理
  isOk = false;
 }
 return isOk;
}
476デフォルトの名無しさん:2008/04/22(火) 21:02:41
ヘタ
477デフォルトの名無しさん:2008/04/22(火) 21:08:17
ちくしょう、傷付くじゃないか。
ちなみにどう直したらいい?
ケチ付けようとかいう気持ちはなく、ただ純粋に参考にしたい。
478デフォルトの名無しさん:2008/04/22(火) 21:10:08
俺ならエラー時、returnの手前にgotoする
まぁあくまで俺個人の意見
479デフォルトの名無しさん:2008/04/22(火) 21:18:06
なるほど。そしてその指摘で気がついたが
別にすべての判定もエラー処理もする必要なかったから
else ifでも良かったかも。
480デフォルトの名無しさん:2008/04/22(火) 21:30:23
むかーしはこんなんもあったよな。

if (a=0)
   {
   a = 5;
   }
else
   {
   a = 6;
   }
481デフォルトの名無しさん:2008/04/22(火) 21:39:35
>>478
そこまでしてreturnしない理由て何?
482デフォルトの名無しさん:2008/04/22(火) 21:47:07
>>481
ソース見たとき、一つのサブルーチンの中に複数returnがあるより、
ERRORみたいなラベルにgotoしてるほうが個人的にすごく見やすかったもんで
483デフォルトの名無しさん:2008/04/22(火) 22:08:16
俺もreturnは一箇所で纏めるな
int iResult = FALSE;

if( ) {
if( ) {
if( ) {
iResult = TRUE;
} else {
}
}

return iResult;

ってな感じ
484デフォルトの名無しさん:2008/04/22(火) 22:11:04
途中で送ってしまったorz

int iResult = FALSE;

if( ) {
if( ) {
if( ) {
iResult = TRUE;
}
}
}

return iResult;

それぞれの分岐のelseにはエラーメッセージの設定や後始末を入れる
ただ、ネストがあまりにも多い場合や 後始末処理が重複する場合のみ
先頭で return 返すかな

以前いた現場のコーディング規約に goto は原則OKだったんだけど、gotoアンチだった俺が
使ってみたらやばい便利だったw
485デフォルトの名無しさん:2008/04/22(火) 22:21:21
なんでBOOLって4バイトもあるん?
486デフォルトの名無しさん:2008/04/22(火) 22:27:55
#define BOOL int
とかなんとかあったような気がする。(Win32SDKの話だが。)
C++のブーリアン型のboolとは別。
487デフォルトの名無しさん:2008/04/22(火) 22:40:11
理由になってないよ
488デフォルトの名無しさん:2008/04/22(火) 22:49:07
8bitとかの方が節約できるのに、ってことか?
アホかお前
489デフォルトの名無しさん:2008/04/22(火) 22:55:09
return を複数書いてて、それにケチをつけられたら「これはガード節ってテクニックです! ケントベック読んだことないんですか!?」とか
言い返してやればいいよ。
490デフォルトの名無しさん:2008/04/22(火) 23:00:35
単純にintの方が速いからじゃね
どうせ1bitを正確に表現する型はないわけだし
491デフォルトの名無しさん:2008/04/22(火) 23:07:50
intをcharにしてメモリを節約しても、油断してるとあちこちでintに変換するコードが入るから、
コード領域では、節約した分はすぐふっとぶね。
492デフォルトの名無しさん:2008/04/22(火) 23:31:28
>>458
> C++で言うところのメンバ変数みたいな感じで良いと思うんだが。 

メンバ変数でも、ひとつのクラスにたくさんあって、メンバ関数もたくさんあるって状態で、
それを好き勝手にいじってたら、グローバル変数と同じだよ。

イベントドリブンのシステムで初心者に作らせると、たいがいそうなるね。
493デフォルトの名無しさん:2008/04/22(火) 23:33:59
つーか、BOOLは真偽値(だけ)を現す型じゃないんだってば。
494デフォルトの名無しさん:2008/04/23(水) 01:59:25
真と偽とエラー値の3通りの値を返す可能性がある、
返り値がBOOL型のWin32 APIがあるらしい。
どうせAPIの互換性なんか気にもしてないんだろうから(偏見)、
とっとと直せばいいのに。
495デフォルトの名無しさん:2008/04/23(水) 02:34:07
GetMessageがBOOL返すけど、何の為にBOOLなのかわからん。
intでいんじゃね? defineする必要なくね?

---MSDN引用
WM_QUIT 以外のメッセージを取得した場合、0 以外の値が返ります。
WM_QUIT メッセージを取得した場合、0 が返ります。
エラーが発生した場合、-1 が返ります。
---引用終わり
496デフォルトの名無しさん:2008/04/23(水) 03:31:07
INTやらBYTEとかと同じだろ。そんなこと言い出したら
Win32APIの型全部無駄だし。

一応BOOLは、「TRUEかFALSEのどちらかになりますよー」という
返り値が2値であろうと予想がつくという意味がある。

だからこそGetMessageはINTか何かにしてくれないと誤解を招くがww
497デフォルトの名無しさん:2008/04/23(水) 09:41:29
XXXcheckなメソッドを複数呼ぶまとまりの
メソッド名とか何かいい名前ないですかねぇ
登録前のチェック群メソッド名
498デフォルトの名無しさん:2008/04/23(水) 10:44:07
CheckPhase
499デフォルトの名無しさん:2008/04/23(水) 11:57:47
Checkers
500497:2008/04/23(水) 14:35:57
>499
素でそれ使ってましたw
それでbool返せば他の人が isMethodみたいに
イメージできるかなぁと思った次第です
まぁちゃんとメソッドヘッダにreturn説明書いてますけれどね
501デフォルトの名無しさん:2008/04/23(水) 19:14:45
状況にもよるだろうが、Checkを確認するの意味で使っているとしたら、
CheckXXXになるケースが多いのではないだろうか。Checkerなら、XXCheckerでも分かるが……
502デフォルトの名無しさん:2008/04/23(水) 21:41:09
gotoつかうやつは知識が無い奴。
上級者はfor(;;)やwhile(1){}を使う。
ヒント:break,continue

分かるかなぁ?www
503デフォルトの名無しさん:2008/04/23(水) 22:07:37
>>502
・・・
504デフォルトの名無しさん:2008/04/23(水) 22:19:14
大学の時に教授にgoto文を使っちゃだめって言われたけど、
なんで?
505デフォルトの名無しさん:2008/04/23(水) 22:25:18
無限ループよりはdo{...break}while(false);のほうが安心出来る
506デフォルトの名無しさん:2008/04/23(水) 22:46:00
>>502
それを使うのが上級者かどうかは置いといて、それを知ってるぐらいで上級者って言って欲しくない。
507デフォルトの名無しさん:2008/04/23(水) 22:46:44
508デフォルトの名無しさん:2008/04/23(水) 22:50:45
場合によって使い分けれるのが一番だな
509デフォルトの名無しさん:2008/04/23(水) 22:57:50
だが、gotoがない言語でも普通に開発できるんだから無理に使う必要ないケースが多い。
510デフォルトの名無しさん:2008/04/23(水) 23:10:47
>>502
 for(;;){break;}を使ったコードがgotoを使ったコードよりどういう点で優れているのか
説明してくれ。
 for(;;){break;}の何が良いのかさっぱり分からないんだ。
511デフォルトの名無しさん:2008/04/23(水) 23:22:00
無限ループからbreakで脱出する利点はわかる。処理Aが終わらないと条件Aの判断ができないとき、

処理A;
while (条件A) {
  処理B;
  処理A;
}

みたいな冗長なコードを書かずにすむ。

while (1) {
  処理A;
  if (条件A) break;
  処理B;
}

でもgotoとは関係ないよね。
512>>502 じゃないけど:2008/04/23(水) 23:32:31
>>510
goto は、ラベルのあるところならどこにでも飛べるのでほんのちょっぴり危険。

for(;;){ break; } なら、後の } に次に行くしかないので少しだけわかりやすい。
(とろこで、なんで for(;;) なの? >>505 のように do{ break; } while(false);
じゃないのか?)

例えば、

if(〜){
 goto Err1;
}

Err1:
 〜;

if(〜){
 goto Err1;
}
Err2:
 〜;

なんて言うミスを防げる。

まあ、関数内で goto を多用しなければあまり問題ないと思うけど、一番の難点は
goto を許すと、ループを goto で作ったりするアホがでてくる可能性があると言
うことだと思う。
513>511:2008/04/23(水) 23:35:49
>if (条件A) break;
...だめだろw


>でもgotoとは関係ないよね
たぶん、こゆこと
goto skip;
do{
 処理B;
skip:
 処理A;
}while(条件A);
514510:2008/04/24(木) 00:00:02
>>511 >>513 なるほど。たまに利用したいケースはあるかも知れない。

>>512
ん〜、タグ名のマチガイかぁ。
それって、変数 x に代入すべきところを y に入れちゃったってのと同レベルのマチガイでしょ。
なんでその問題解決に、無限ループしてカッコ閉じを探すスタイルを使うのかが分からない。
タグ名で意味づけできる&無条件で移動するという意図が明確なんだから、
まだ goto 使うほうがマシな気がするんだよねぇ。

> 一番の難点は goto を許すと、ループを goto で作ったりするアホが
> でてくる可能性があると言うことだと思う。
これは激しく同意。
515デフォルトの名無しさん:2008/04/24(木) 00:08:43
>>513
う〜ん。そのgotoはキモイw 悪い例として書いてくれているんだろう。

というのは、俺が>>511の書き方をするのは、長さのわからないストリームを読むときにほぼ限られるから。
処理Aでストリームを読んで、処理Bでそのデータをゴニョゴニョするのに、順番が逆になっていると、実にキモイ。
516デフォルトの名無しさん:2008/04/24(木) 00:13:40
> それって、変数 x に代入すべきところを y に入れちゃったってのと
> 同レベルのマチガイでしょ。

自分はそう言う間違いを絶対にしないと言うなら、goto 文使っても問
題ないよ。
517デフォルトの名無しさん:2008/04/24(木) 00:57:42
10行くらいの関数だったら多少のgotoは気にならない。
でも数十行以上の関数だったら勘弁してほしい。
518デフォルトの名無しさん:2008/04/24(木) 00:59:59
>>513
511の方が普通だな。本当に普通だ。
何かが起こったらbreakする普通の無限ループに過ぎないわけだがw

javaの名前付きブロックで置換できないようなgotoの使い方は
多分、考え直した方が良いな。

名前付きブロック、デストラクタ、例外、関数リテラル
とかがあれば、gotoは要らなくなってくる。
全部無いプレーンCには明らかにgotoが必要だろ。
519デフォルトの名無しさん:2008/04/24(木) 01:04:55
>>518
>>513>>511に突っ込んでいるのは、多分、条件が逆ってことだろ。
520デフォルトの名無しさん:2008/04/24(木) 01:35:44
>>519
あー、あー、やっと理解できた。
502が想定して叩いてるgoto使い、
を想像したコード例を書いたのか。
521デフォルトの名無しさん:2008/04/24(木) 01:47:06
>520
本当に理解できてるのかw

>条件が逆ってこと
だNE!
522デフォルトの名無しさん:2008/04/24(木) 02:07:00
>>条件が逆ってこと
>だNE!
その下の変なコード例挙げた意図を曲解したってことだよ。
523デフォルトの名無しさん:2008/04/24(木) 02:56:54
goto議論はアホでも参加できるからすぐ荒れるね
524502:2008/04/24(木) 04:29:22
ネタ投下したまま忘れてた。ゴメン
525デフォルトの名無しさん:2008/04/24(木) 04:36:38
>>524
よぉ、キチガイ
526デフォルトの名無しさん:2008/04/24(木) 05:03:40
goto文の代わりにwhile文を使うメリットを教えて進ぜよう。
それは宇宙の真理をコードで表現することである。
本質的に全ての制御はループで記述できるという宇宙の真理が存在する。
むしろ、我々が「ループではない」と思っているものは一回だけループするという特殊なループに過ぎない。
このことを表現することが出来るのである。
527510:2008/04/24(木) 08:04:17
>>526
う〜んなるほどありがとう
528デフォルトの名無しさん:2008/04/24(木) 08:20:18
つまり、whileさえあればifも必要ないってことですな。
529デフォルトの名無しさん:2008/04/24(木) 08:53:35
>501
RegistCheck, InsertCheckとかで
XXXXCheckを束ねて boolをreturnしてるけど
まぁ一般的なんですね
530デフォルトの名無しさん:2008/04/24(木) 09:26:58
for(i=0;i<x;i++){
for(j=0;j<y;j++){
goto LABEL;
}
}
531デフォルトの名無しさん:2008/04/24(木) 10:28:12
コードについて話すなら。
構造化定理
ぐらいは知っておいてくれ。
532デフォルトの名無しさん:2008/04/24(木) 12:32:51
ぐぐってみた。
「構造化定理は、
全てのアルゴリズムは、
順次、選択、繰り返しの3つの基本制御構造を組み合わせて作ることができる
という定理ですが」
・・・・・w
533デフォルトの名無しさん:2008/04/24(木) 15:14:51
532 :デフォルトの名無しさん [↓] :2008/04/24(木) 12:32:51
ぐぐってみた。
「構造化定理は、
全てのアルゴリズムは、
順次、選択、繰り返しの3つの基本制御構造を組み合わせて作ることができる
という定理ですが」
・・・・・w
534側近中の側近 ◆0351148456 :2008/04/24(木) 21:22:43
>>470
>>475
>>278
(っ´▽`)っ
この議論はコードコンプリートに取り上げられている。
さあ読むんだ。コードコンプリートを。
535側近中の側近 ◆0351148456 :2008/04/24(木) 21:25:45
>>472
(っ´▽`)っ
リソースを確保してるのがローカル変数だったらどうする?

int Func(void)
 void *p;
 p = malloc(1024);

 (処理)

 free(p);
 return;
}
536デフォルトの名無しさん:2008/04/24(木) 21:28:49
alloca
537側近中の側近 ◆0351148456 :2008/04/24(木) 21:31:23
>>491
(っ´▽`)っ
それどころかめちゃくちゃ遅くなる場合がある。
たとえばchar型をループカウンタに使った場合。
ループ1回まわる度に、int型にキャストされるから。
単なるキャストと思われがちだが、
キャストというのは記憶領域を新たに確保しなければならない
結構高価な処理なのです。
538側近中の側近 ◆0351148456 :2008/04/24(木) 21:50:27
(っ´▽`)っ
っていうか、returnを複数書くと保守の時がっかりするんだよね。

int Func(void)
{
  (処理)
  if(ErrorCode == 1){
    (エラー処理)
    return;
  }
  else if(ErrorCode == 2){
    (エラー処理)
    return;
  }
  else if(ErrorCode == 3){
    (エラー処理)
    return;
  }
  else{
    (正常時の処理)
    return;
  }
}

上司「(っ´▽`)っ どんなエラーが起きても終了処理Aが行われるように直して!」
部下「(っ´ω`)っ 4箇所も直すのか・・・。」

〜1年後〜

上司「(っ´▽`)っ どんなエラーが起きても終了処理Bが行われるように直して!」
部下「(っ`Д´)っ また4箇所も直すのか!氏ね!」
539側近中の側近 ◆0351148456 :2008/04/24(木) 21:54:22
コードの標準化、改善がなされているプロジェクト
(っ´▽`)っ(っ´▽`)っ(っ´▽`)っ(っ´▽`)っ ←みんなニコニコ

コードの標準化も改善も全くなされていないプロジェクト
(っ´ω`)っ(っ`Д´)っ(っ;д;)っ(っ ゚▽ ゚)っ ←欝病、キレる人、泣く人、狂う人
540デフォルトの名無しさん:2008/04/24(木) 21:57:20
>>538
Cだとそうなって仕方ないけど、
finallyやデストラクタなど後始末をまとめる機能のある言語なら困らない。
541側近中の側近 ◆0351148456 :2008/04/24(木) 21:59:13
>>540
(っ´▽`)っ
大賛成!Cだと困る。だからCは困る☆
542デフォルトの名無しさん:2008/04/24(木) 22:03:57
まぁエラー時の共通処理を関数化したりマクロ化すればいいんだけど
それでも面倒だよね
543側近中の側近 ◆0351148456 :2008/04/24(木) 22:04:11
(っ´▽`)っ
こういうことだね。

int Func(void)
{
  try
  {
    (主処理)
  }
  catch(Exception e)
  {
    (例外処理)
  }
  Finally
  {
    (終了処理)
  }
}

上司 「(っ´▽`)っ 終了処理Aを入れて☆」
部下 「(っ´▽`)っ は〜い☆Finally句に入れるだけでOK!」
544側近中の側近 ◆0351148456 :2008/04/24(木) 22:13:46
(っ´▽`)っ
構造化プログラミングとは、順次、選択、繰り返しで構成されるプログラミングだね。

主処理、エラー処理、終了処理で構成するプログラミングにも名前を付けよう☆

主処理、エラー処理、終了処理を1ブロックとし、
そのブロックも主処理、エラー処理、終了処理のいずれかに所属する。
そのブロックも、それを含むブロックも、さらにそれを含むブロックも
主処理、エラー処理、終了処理のいずれかに所属する。

ここでいう、主処理とはtry句、エラー処理とはcatch句、終了処理とはfinally句に対応する。

どんな名前がいいかな?
545デフォルトの名無しさん:2008/04/24(木) 22:16:26
Java?
546デフォルトの名無しさん:2008/04/24(木) 22:24:08
つ 定列化プログラム
すまん、センスねーな

gotoって昔は使うなっていう風潮があったけど
今はスキルのある人が使うのはいいんじゃない? てきな流れになってなかった?
まあ、gotoのジャンプ先は return 直前の後始末にセットしておく以外使い道は分からんが
547デフォルトの名無しさん:2008/04/24(木) 22:36:22
初期化

ループ {
if(x) goto 初期化
}

こんなときとか
548デフォルトの名無しさん:2008/04/24(木) 22:53:04
>>547
初めてみたw

今居るプロジェクトで
do {
startLoop:

// 処理
if(){
goto startLoop;
}
} while(1);

↑のような書き方してる奴が居た
マジ吹きそうになったな
549デフォルトの名無しさん:2008/04/24(木) 23:04:01
continueを教えてやれよ
550側近中の側近 ◆0351148456 :2008/04/24(木) 23:11:09
(っ´▽`)っ
VB厨なんじゃないの?continueを知らないってことは
551デフォルトの名無しさん:2008/04/25(金) 01:01:06
勉強不足なんだろうな。
他人のコードを見れば分かるレベルの話じゃん
552デフォルトの名無しさん:2008/04/25(金) 01:03:36
え?なんでcontinue使わないといけないんですか?
goto startLoop;でもあっていると思うんですが。。
553デフォルトの名無しさん:2008/04/25(金) 01:24:54
doとwhileでcontinueしたときってwhileの判定ってやるんだっけ?
両方とも滅多に使わないから組み合わせ時の動作が分からない。
554デフォルトの名無しさん:2008/04/25(金) 01:25:15
あってるよ。どっちも同じ動作だし。
同じ動作でも書き方が違うから「ヘタなコード」というものができるんじゃないのか?
555デフォルトの名無しさん:2008/04/25(金) 06:40:02
gotoで済むところを
わざわざwhile + continueに変えて可読性を落とす馬鹿
556デフォルトの名無しさん:2008/04/25(金) 08:23:58
555 :デフォルトの名無しさん [↓] :2008/04/25(金) 06:40:02
gotoで済むところを
わざわざwhile + continueに変えて可読性を落とす馬鹿
557デフォルトの名無しさん:2008/04/25(金) 09:20:27
>>553
whileの判定はある

このスレ読むと goto は使ってもいいんだなと思うな
滅多に使わないけど
558デフォルトの名無しさん:2008/04/25(金) 09:27:45
>whileの判定はある

マジで?
うわー勘違いしてた
559デフォルトの名無しさん:2008/04/25(金) 11:04:21
gotoは有用だが解ってない奴に使わせると危険
560デフォルトの名無しさん:2008/04/25(金) 11:09:17
ふぃなりーはとらいとかきゃっちのなかからりたーんのときでもじっこうされますの?
561デフォルトの名無しさん:2008/04/25(金) 11:59:52
そのためのfinallyだ。読みはファイナリーだ。
562デフォルトの名無しさん:2008/04/25(金) 21:07:05
フィナリーセブン!
563デフォルトの名無しさん:2008/04/26(土) 00:09:33
gotoは構造を無視できるから嫌われる
564デフォルトの名無しさん:2008/04/26(土) 02:32:26
本物のプログラマは、gotoを恐れずに使う。
565デフォルトの名無しさん:2008/04/26(土) 02:57:40
本物?
gotoを使わないようにするためだけに変な構造のコードをかくのは確かにヘタだが
566デフォルトの名無しさん:2008/04/26(土) 03:45:53
continueもbreakも概念的にはgotoと同列
567デフォルトの名無しさん:2008/04/26(土) 07:42:39
>>565
「本物のプログラマ」をググってみるといいと思うよ
568デフォルトの名無しさん:2008/04/26(土) 08:05:02
breakもcontinueもreturnも、乱用するとgoto同様に読みにくくなる。
ただ、gotoに比べて前者の3個は、飛ぶ方向と位置があらかじめ決まってる分だけ可読性に少し寄与しているだけ。
569デフォルトの名無しさん:2008/04/26(土) 10:13:19
>>566
gotoの真の力は計り知れない。
continueやbreakなどとはその設計段階からして、まったく異なる思想の元に創生されたものだ。
迂闊にgotoの封印を解いてしまうと管理局の統制が利かなくなり世界を崩壊に導く恐れがある。
570デフォルトの名無しさん:2008/04/26(土) 10:21:31
特にC/C++のgotoは、ループの外から中に飛び込めるからなあ。
switchのラベルもそうだが。
571デフォルトの名無しさん:2008/04/26(土) 11:24:36
おまえらgotoでこんなに揉めるなんて

継続とか使ったらどうなっちゃうの
572デフォルトの名無しさん:2008/04/26(土) 11:27:34
すまん継続って何だろう?
継承じゃない?
573デフォルトの名無しさん:2008/04/26(土) 11:29:00
まあ、>>523の言う通りってこった。
テンプレートとかジェネリクスでは、ここまで盛り上がれまい。
574デフォルトの名無しさん:2008/04/26(土) 11:37:49
>>572
プログラマが制御できる大域ジャンプのようなもの
setjmpの強力な奴と思えばいい

schemeとかrubyに実装されてる
575デフォルトの名無しさん:2008/04/26(土) 11:46:11
>>574
ありがと
scheme、rubyはノータッチだorz
576デフォルトの名無しさん:2008/04/26(土) 12:07:32
>>575
無知の言い訳ワロス

俺も知らなかったけど
577デフォルトの名無しさん:2008/04/26(土) 13:29:52
>>575
ノータッチとか言う以前に
gotoの話してたのに継承のtypoなわけないだろ常考
578デフォルトの名無しさん:2008/04/26(土) 13:32:03
>>577
昔は、継承は「90年代のgoto問題」とか言われてたよ。
579デフォルトの名無しさん:2008/04/26(土) 14:26:18
continuation どころか closure さえ使えないんだから許してやれよ。
580側近中の側近 ◆0351148456 :2008/04/26(土) 18:19:39
(っ´▽`)っ
継承はカプセル化を崩壊させるからな
581デフォルトの名無しさん:2008/04/26(土) 18:27:02
にちゃねるって程度が低いよな。
なんかがっかりするレスが多い。
582デフォルトの名無しさん:2008/04/26(土) 18:28:44
わざわざ書き込んじゃうあたり、程度が知れるね♪
583デフォルトの名無しさん:2008/04/26(土) 18:29:34
まとめると、
・本物のプログラマは goto を恐れないで使う
・賢い本物のプログラマは continuation も使いこなす
・女子供は break や continue だけを恐る恐る使う
584デフォルトの名無しさん:2008/04/26(土) 18:38:27
continuation = 大域で状態付きのgoto

gotoよりたちが悪い
585デフォルトの名無しさん:2008/04/26(土) 18:46:49
吉野家コピペに近いものがあるな
586デフォルトの名無しさん:2008/04/26(土) 20:27:03
gotoは適切に使えばいいと思うが、
gotoを使うことを心がけたコーディングは駄目だな。
587デフォルトの名無しさん:2008/04/26(土) 20:37:15
if と goto さえあれば生きていける。
588デフォルトの名無しさん:2008/04/26(土) 20:37:54
そうか、gotoも使えるようにならないと駄目だな。
機会があれば使って、慣れるようにしよう。
589デフォルトの名無しさん:2008/04/26(土) 20:38:35
悪習を真似る必要は無いぞ
590デフォルトの名無しさん:2008/04/26(土) 20:40:10
goto使うと見通しが悪くなる

気がする
591デフォルトの名無しさん:2008/04/26(土) 21:18:38
必要な処理が全て下に固まってるってとてつもなく
よろしくない?経験の浅い初心者にその処理下みれば全部あっから。
って指示しやすい。
592デフォルトの名無しさん:2008/04/26(土) 21:51:50
それをするなら、必要な処理を全て下に固める事を規約で決めないといけない。
さらに言うとその規約の外で書かれたコードはそうなっている保証がない。
潰しのきかない知識を植え付けるだけだと思う。
593デフォルトの名無しさん:2008/04/27(日) 01:15:23
クロージャーやらsetjmpって構造化無視なのか。
手元の小さな作業は減るけど見通しが悪くなるでよい?
594デフォルトの名無しさん:2008/04/27(日) 01:32:38
とりあえず、closureとcontinuationについて調べてから発言しようぜ。
595デフォルトの名無しさん:2008/04/27(日) 02:25:32
恐ろしい・・・
596デフォルトの名無しさん:2008/04/27(日) 10:28:38
>>593
クロージャを使う事で構造化より見通しが良くなるのであれば
それは良い事
597デフォルトの名無しさん:2008/04/27(日) 10:30:28
だいたい手段と目的を履き違えている奴多すぎだろ
色々な手法は何のために作られてるのか考え直せ
598デフォルトの名無しさん:2008/04/27(日) 10:35:11
設計思想が無い
道具の使い方はいくない
バカと包丁だじぇ
599デフォルトの名無しさん:2008/04/27(日) 17:43:43
・インデントが半角スペースではなくタブで行われている
600デフォルトの名無しさん:2008/04/27(日) 17:47:14
・しかも、4桁毎のタブを使用している。
601デフォルトの名無しさん:2008/04/27(日) 17:53:20
エディタでタブみたいにカーソルが動いてくれれば、正直どっちでもいい。
逆に言えば、そうじゃないことの方が多いからタブ使っている俺。
602デフォルトの名無しさん:2008/04/27(日) 18:25:38
普通にtabですが

混在させてる奴は糞
603デフォルトの名無しさん:2008/04/27(日) 18:49:53
基本タブで微調整にスペースって感じで混在させてる奴はよくいるな。
604デフォルトの名無しさん:2008/04/27(日) 19:14:37
タ ブ スペ4while(式) {
タ ブ タ ブ 何らかのコード

なんてされると、4タブ派はまずネスト修正しないといけないからな。
単文のネスト以外はTabかスペースに統一して欲しいよ。
605デフォルトの名無しさん:2008/04/27(日) 19:16:40
そんなのフォーマッタにかけてしまえばよいじゃん。
ソース内にアートを書くようなのにはjavadocでも教えてやれ。
606デフォルトの名無しさん:2008/04/27(日) 19:25:31
>>603
条件演算子でこうやって縦に揃えるときにやる。
[タブ]return isHoge ? Foo
[タブ]ここは空白  : Bar;
607デフォルトの名無しさん:2008/04/27(日) 19:25:56
タブa = 0;
タブbb = 1;
タブccc = 2;
みたいに揃えるためにスペースを混在させるのはありか?
608デフォルトの名無しさん:2008/04/27(日) 19:27:39
そろってないよ
609デフォルトの名無しさん:2008/04/27(日) 19:28:57
>>607
IDEの類が勝手にスペースとっちゃうことがあるから、
行頭のインデント以外で、縦に揃えようとするのはやめてほしい。
610デフォルトの名無しさん:2008/04/27(日) 19:43:26
そうか無しか。残念。
混在は行頭だけにしとく。
611デフォルトの名無しさん:2008/04/27(日) 20:15:49
gnuはインデントがスペース2コで、8以上になるとタブになるって、変態インデントだよな。
612デフォルトの名無しさん:2008/04/28(月) 00:24:42
>611
あれ、8タブを強制されてる感じがして嫌だわ。
613デフォルトの名無しさん:2008/04/28(月) 00:26:52
>606
そういうコードはネストを崩される余地がほぼないから
4タブでもちょくちょく書く。
614デフォルトの名無しさん:2008/04/28(月) 16:02:59
>>599
ifが追加されるなどインデント変更する作業が面倒そう

>>600
set tabstop=4とでもしとけばええがな
615デフォルトの名無しさん:2008/04/28(月) 16:20:19
俺はタブは2つ分だよ。
616デフォルトの名無しさん:2008/04/28(月) 17:18:44
ああ、キチガイか。
617デフォルトの名無しさん:2008/04/28(月) 20:17:03
タブ8でコード書いてる俺は?
618デフォルトの名無しさん:2008/04/28(月) 20:20:29
インデントはスペース2個!
タブは使わない(タブキーは使うけど)
619デフォルトの名無しさん:2008/04/28(月) 20:24:23
インデントはタブキーでやれ!!
スペースでもいいけど。
620デフォルトの名無しさん:2008/04/28(月) 21:28:48
ここを読んでいて、最近はVisualStudioの自動整形任せで、2年くらい自分でインデントしてないことに気付いた。
621デフォルトの名無しさん:2008/04/29(火) 00:10:39
そういえばVisualStudio使うと強制的にスペースに変換されてるな。
622デフォルトの名無しさん:2008/04/29(火) 00:42:32
VisualStudioを使うと強制的にTabになる。
場合によってはTab+スペースになる。
(関数のパラメータの一つ一つについて改行を入れた場合など)
623デフォルトの名無しさん:2008/04/29(火) 01:25:43
>>621-622
ひんと: オプション設定
624デフォルトの名無しさん:2008/04/29(火) 02:05:37
>614
まともな環境ならインデントレベルの変更なんて
コマンド一発か、選択範囲のインデント変更くらいあると思うが。
無くても矩形コピー → 矩形貼付で出来ちゃうし。
625デフォルトの名無しさん:2008/04/29(火) 23:00:02
オレは7カラム目で揃える主義。
626デフォルトの名無しさん:2008/04/29(火) 23:11:37
インデントはtabにしておくと、読む側が好きなインデント量を指定できて便利じゃないか。
627デフォルトの名無しさん:2008/04/30(水) 02:06:22
Tabキーでスペース四個挿入するオプションの無いエディタは
作者ともども消えてなくなればいいと思う。
628デフォルトの名無しさん:2008/04/30(水) 02:50:53
インデントって>>626の言うように、Tabだから良いんじゃないのか????
スペース1つだけ使うときは別として、インデントはTabじゃないの??????????
629デフォルトの名無しさん:2008/04/30(水) 04:36:43
>>625のソースの全行の6カラム目に*を入れたい
630デフォルトの名無しさん:2008/04/30(水) 09:00:43
>629
それ何てCOBOLのコメント
631デフォルトの名無しさん:2008/04/30(水) 12:37:05
6カラム目は Fortran の継続行じゃなかったっけ。
(ちなみに、空白以外の文字ならいいんだけど '$'
を推奨ってものの本に書いてあったな。)

COBOL のコメントは 7カラム目だし。
632デフォルトの名無しさん:2008/04/30(水) 12:54:55
FORTRANの神カードには行番号と継続の桁の線が太くなってたから何桁目だったか覚えてないや。
633デフォルトの名無しさん:2008/04/30(水) 13:01:51
恐れ多いカードだな。
634デフォルトの名無しさん:2008/04/30(水) 14:13:54
だからどうして行主導の言語の話しになるのか と
635デフォルトの名無しさん:2008/04/30(水) 14:21:34
行主導じゃない言語のほうが稀だろ。
つーか、COBOLやFORTRANは桁依存性が高いと言うべきじゃね。
636デフォルトの名無しさん:2008/04/30(水) 14:25:36
>>635
>行主導じゃない言語のほうが稀だろ。
いまどき、固定書式が要求されるのなんて
古いFORTRANと古いCOBOL、それにRPGくらいしか知らないんだが
そんなに多いのか?
637デフォルトの名無しさん:2008/04/30(水) 14:29:26
>>636
例えばC/C++はプリプロセッサやコメントが行単位だし、ソース最終行に改行は必要だね。
改行コードを全く必要としない言語ってbrainfuckの類以外に何がある?
638デフォルトの名無しさん:2008/04/30(水) 14:41:24
行主導と固定書式じゃ全然違うだろ。

つーか、行主導とやらの定義を明確にしてくれよ。
639デフォルトの名無しさん:2008/05/01(木) 01:16:37
行主導って多次元配列の添え字の数の変わるのが
右からか左からかの違いに使われる言葉だと思っていたな。まあいいや

行主導:parsingの単位が物理的な行である言語
文主導:parsingの単位が文

ってなところでどうかな?
640デフォルトの名無しさん:2008/05/01(木) 07:34:52
>>637
Pascal / Modula-2 あたりは改行コードは不要なはず。

>>639
> 行主導:parsingの単位が物理的な行である言語

おおまかにはそれでいいと思うんだけど...

・コメントは行末までと言う言語が多いからこれをどうみるか?
・プリプロセサの扱いは?
・BASIC なんかの行番号が必要な言語は?

等を決めないと俺俺定義で語る奴ばかりになりそう。
641デフォルトの名無しさん:2008/05/11(日) 19:24:33
今いる職場でみたツールプログラムは

 ・全変数の8割がグローバル変数
 ・配列などを一切使っていない(それどころか、mallocなどもない)
 ・変数名がやたら長い
 ・ほとんどCの標準関数ばかりでWindows APIをまったく使っていない
 ・メンバ変数やメンバ関数は全部 public にしている

一応作った人って6年くらい働いている人なんだけどね・・・
642側近中の側近 ◆0351148456 :2008/05/11(日) 19:45:40
>>641
(っ´▽`)っ
それはCOBOLerだな?!
643デフォルトの名無しさん:2008/05/11(日) 19:52:02
>>641
>・ほとんどCの標準関数ばかりでWindows APIをまったく使っていない

移植性考えたらこの方がいいと思うが...。

て言うか、やっつけツールなら >>641 のような状況もありだと思う。
644デフォルトの名無しさん:2008/05/11(日) 20:04:32
ツールプログラムなら変数名がやたら長い点を除けばワリとあるんじゃね?
だって他人が読む前提を捨てているプログラムだろ?
漏れだったら別にx1とかchr1とかメチャ省略するし。

それに漏れも出来るならWindowsAPI使わずに済むなら使わない派だし。
645デフォルトの名無しさん:2008/05/11(日) 20:16:40
ツールなら逆に、全部ローカルでprivateにして、極力他人に触らせないようにするけどなぁ。
646デフォルトの名無しさん:2008/05/11(日) 21:12:08
>>642
いや違うよ。Cをずっとしていたみたい。C++はそんなに経験ないかも。

>>643
>>644
やっつけツールみたいなのは今までも見てきたけど、今回のよりずっと見栄えもいい物ばかりだったからな・・・
漏れが厳しいのかな・・・
それに今使ってるツールはみんな日常的によく使うし、今後仕様改訂に伴って追加・変更もあるからせっかくならそれなりに書いたほうがいいと思ったのだ。
647デフォルトの名無しさん:2008/05/11(日) 21:25:58
 
648デフォルトの名無しさん:2008/05/11(日) 21:48:24
>それに今使ってるツールはみんな日常的によく使うし、今後仕様改訂に伴って追加・変更もあるからせっかくならそれなりに書いたほうがいいと思ったのだ。

そう思うなら>>646が自分で書き直せば?って思うが。
やっつけのツールでソースが公開されているのは「不満があるならテメエで直せ」って
意思表示でもあると思うが。

漏れもやっつけ&他人に使って欲しくないならソースを隠す。
やっつけ&責任放棄の時はソースを晒しとく。w
649デフォルトの名無しさん:2008/05/11(日) 21:52:42
>>648
たしかにそうだね。
今度書き直してみるよ
650デフォルトの名無しさん:2008/05/11(日) 21:56:33
やっつけでもグローバル変数8割はないだろ。
スクリプト言語で、50行のソースとかならともかく。
651デフォルトの名無しさん:2008/05/11(日) 22:44:42
わかりやすいコードを作成するための 6 つの方法
ttp://www.ibm.com/developerworks/jp/linux/library/l-clear-code/index.html

ヒント 1: 賢い人にならってコメントを付けること
ヒント 2: #define をたくさん使うこと。ただしやたらに使うのは禁物です
ヒント 3: わかりにくい変数名を使わないこと
ヒント 4: エラー・チェックを行うこと。誰にだって間違いはあります
ヒント 5: 「Premature optimization is the root of all evil (早まった最適化は諸悪の根源である)」 - Donald Knuth
ヒント 6: あまりにも賢くなりすぎないこと
652デフォルトの名無しさん:2008/05/11(日) 22:47:45
>やっつけでもグローバル変数8割はないだろ。
>スクリプト言語で、50行のソースとかならともかく。

やっつけなんて精々1・2画面程度のソースなんじゃね?
んな、やっつけで500行も書くとは思えんが。
653デフォルトの名無しさん:2008/05/11(日) 23:15:19
そもそも、メンバ変数とか言ってるから C++ の話だと思うんだが、C++ で malloc が
どうのこうのと言ってる >>641 が人のコードを批判するのもどうかと思う。
654デフォルトの名無しさん:2008/05/12(月) 16:24:18
>>653
new/delete はおろか malloc/realloc/free すら使っていない、って事だろう。
態々論点からズレたところを指摘せんでも。
655デフォルトの名無しさん:2008/05/12(月) 21:26:22
え〜〜っと、本人乙ってことでいいのかな。
656デフォルトの名無しさん:2008/05/12(月) 22:24:06
newもmallocもHeapAllocも使わないならどうやってヒープ確保すんの
657デフォルトの名無しさん:2008/05/12(月) 22:42:37
配列を使わないのにヒープなんていらないだろ。
658デフォルトの名無しさん:2008/05/12(月) 23:08:15
複数個のデータが必要な時はどうしてるんだ?
まさか
int n0,n1,n2,n3...;
なわけないよな?
659デフォルトの名無しさん:2008/05/12(月) 23:12:27
リンクトリスト
660デフォルトの名無しさん:2008/05/13(火) 04:59:09
661デフォルトの名無しさん:2008/05/13(火) 07:41:24
>>658
std::vector
662デフォルトの名無しさん:2008/05/13(火) 08:44:20
配列は使わないのにSTLは使うなんて、もう何が何だかw
663デフォルトの名無しさん:2008/05/13(火) 11:24:53
>662
C++で、速度がそれほど切羽詰まってなきゃ妥当な選択だけど
664デフォルトの名無しさん:2008/05/13(火) 11:37:45
vector なら配列も使ってないしヒープもいらないと言うのか?
vector は配列の一種だし、中でヒープも使ってるはずなんだが。
665デフォルトの名無しさん:2008/05/13(火) 11:55:40
ユーザコード内で使うのは駄目ってことなんじゃないのかな
666デフォルトの名無しさん:2008/05/13(火) 13:06:55
ユーザーコードって何だよ
667デフォルトの名無しさん:2008/05/13(火) 14:58:52
相手の意図を読むとかググるとかできんのかな。
668デフォルトの名無しさん:2008/05/13(火) 16:58:36
>>641で書かれてるヤツがvector使えるとは思えないw
669デフォルトの名無しさん:2008/05/13(火) 20:16:25
初心者です
vector使うのはやっぱ高度な難しいんですか?
やはりGlobalAllocなどで馴れてからにしたほうがいいですhおうか?
670デフォルトの名無しさん:2008/05/13(火) 20:18:07
>>669
やってはいけないことを知ってれば問題ないよ。
追加削除したら参照もイテレータも無効になることを知ってればOK
671デフォルトの名無しさん:2008/05/13(火) 20:31:40
>>669
そもそも日本語使うのは高度な難しいんじゃね?
672デフォルトの名無しさん:2008/05/13(火) 20:33:50
高度な文字コード
673デフォルトの名無しさん:2008/05/14(水) 03:48:47
有名なAccelerated C++では配列やポインタよりも先に
vectorが出てくるから全然不自然ではない。
>>641で言われている人がvectorを使っているのかどうかはさておいて。
674デフォルトの名無しさん:2008/05/14(水) 11:53:11
アクセラC++はstringもchar[]より先なんだよな
""リテラルは出て来るが、stringに入れる為の表記としてだったり
その後もしばらくstringとは別物であることしか説明しない
詳細に説明されるのは、後々charと配列の説明が終わった後
675デフォルトの名無しさん:2008/05/14(水) 12:58:25
同じ著者のC++Primerもそのスタイルになっとるな
676デフォルトの名無しさん:2008/05/14(水) 17:08:47
そもそもGlobalAllocを積極的に使う機会ってあるか?

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

それ以外のときはそもそもmallocとかnew[]で十分、GlobalAllocを選ぶ理由はない。
もちろん、その中のどれよりもvectorのほうが便利だが。
677デフォルトの名無しさん:2008/05/14(水) 23:05:07
new と vector のどっちが便利かはさておいても、malloc のでる幕なんてないと思うが。
678デフォルトの名無しさん:2008/05/14(水) 23:09:04
それは環境依存なので
679デフォルトの名無しさん:2008/05/15(木) 22:11:38
C++でnewではなくmalloc使う状況が思いつかん。
newの実装がひどくて、しかたなくmalloc使っているとか?
680679:2008/05/15(木) 22:17:32
書き込んだ後に思いついて試してみた。
malloc/freeならコンストラクタ/デストラクタが呼ばれないんだな。
そういうわけで、
・コンストラクタ/デストラクタの呼び出しを抑えたい
・ベターCとしてC++使っている
環境なら、mallocもありなんだな。
681デフォルトの名無しさん:2008/05/15(木) 22:22:37
そういう場合でも new char[x] でOK
682デフォルトの名無しさん:2008/05/15(木) 22:34:27
> ・コンストラクタ/デストラクタの呼び出しを抑えたい

そもそもそんな状態になること自体がヘタなコー...
683デフォルトの名無しさん:2008/05/16(金) 12:13:29
realloc使うときとか?
684デフォルトの名無しさん:2008/05/16(金) 23:51:59
>>680
> malloc/freeならコンストラクタ/デストラクタが呼ばれないんだな。
明示的に operator new ( size_t ) を呼べばコンストラクタは呼ばれないし、インターフェース的にも(例外以外は)malloc() 互換であり、その理由ならば malloc() は不要。
685デフォルトの名無しさん:2008/05/17(土) 01:59:01
STLが使えない時にreallocしたいときだな
686デフォルトの名無しさん:2008/05/20(火) 11:34:08
そのときはrealloc()を使えばいいのだから、やはりmalloc()は不要。
687デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/05/27(火) 00:25:39
コンパイル通らないだろ
689デフォルトの名無しさん:2008/05/27(火) 22:35:06
さすがに、void main() で値を返してるから、エラーになっちゃうな。

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

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

と言われる @ VC++ 2005 Express
690デフォルトの名無しさん:2008/05/27(火) 22:38:09
おきるわな
691デフォルトの名無しさん:2008/05/27(火) 23:19:05
>>687
so what?
692デフォルトの名無しさん:2008/06/09(月) 23:27:32
だからなにwwwwwww
693デフォルトの名無しさん:2008/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デフォルトの名無しさん:2008/08/06(水) 00:21:28
なんで

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

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

まあ、そう言う問題じゃないのは承知の上で。
695デフォルトの名無しさん:2008/08/06(水) 08:24:11
#define LOOP_CANCELER(a) (void)0;
って再定義したんじゃだめだったん?
696デフォルトの名無しさん:2008/08/06(水) 08:39:37
C言語なら俺に聞け(入門篇) Part 33
http://pc11.2ch.net/test/read.cgi/tech/1217073697/544

217行でインデントが9レベルあったり482行で4レベルだったり……
697693:2008/08/07(木) 01:09:32
>>694
その辺は彼なりになんかあったのかも。
まぁ、そもそもまともな思考があれば、このマクロが及ぼす弊害は簡単に想像つくわけで。

>>695
多分大丈夫だったと思う。しかしこれは氷山の一角で、
そのLOOP_CANCELERが本当に役に立ってるんじゃないかと信じてしまいたくなるほど
壊滅的なコードだった。ベテランも含め誰もが直接触るのは避け、
山ほどバグを出し、それらは場渡り的に修正され、そのままリリースされた。
698デフォルトの名無しさん:2008/09/24(水) 22:26:25
void function()
{


for (int i = 0; i < HOGEMAX; i++)
{
.
.
fuga:
.
.
}
699デフォルトの名無しさん:2008/09/24(水) 22:27:12
途中で投入してしまった。

void function()
{


goto fuga;


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

か?って言われても…
701デフォルトの名無しさん:2008/10/25(土) 00:29:53
// はい、やってます。

って、書いとけ。
702デフォルトの名無しさん:2008/10/25(土) 01:00:19
しかし、実際本当にわからないのがヘタコードクオリティ
703デフォルトの名無しさん:2008/10/25(土) 01:25:41
引き継いだコードがマジックナンバーの嵐だった…
704デフォルトの名無しさん:2008/10/25(土) 03:59:33
何か問題あるの?
705デフォルトの名無しさん:2008/11/05(水) 08:45:35
全ての行にコメント書いてます
706デフォルトの名無しさん:2009/01/31(土) 03:07:45
for(int i=0;i<max;i++)
{
   HOGE hoge = new HOGE();
}
707デフォルトの名無しさん:2009/01/31(土) 11:23:32
>>706
*がないからC#か?
だったら問題ないか?
708デフォルトの名無しさん:2009/01/31(土) 11:36:09
ヘタってのは、セキュアじゃないとか、リークするとかとはまた別の要素なんだな。
なんというか、正しい動作はするんだけど素人臭いというか、そんな感じ。
709デフォルトの名無しさん:2009/01/31(土) 19:00:28
無駄なコメント
710デフォルトの名無しさん:2009/02/02(月) 19:43:16
// これはコメントです
711デフォルトの名無しさん:2009/02/07(土) 07:00:28
a = 0; // aにゼロを代入する
712デフォルトの名無しさん:2009/02/08(日) 00:15:27
// 2009/02/08 変更開始
//a = 0; // aにゼロを代入する
a = 1; // aにゼロを代入する
// 2009/02/08 変更終了
713デフォルトの名無しさん:2009/02/14(土) 16:19:32
procedure unko{
ittekuru();
}
714デフォルトの名無しさん:2009/03/31(火) 18:13:58

Vector v = new Vector();
Iterator i = v.getEnumlation();
for (int j = 0; J<v.size(); i.next())
{
i.next();
:BUTTOBI
i.get(j);
}

goto BUTTOBI;
715デフォルトの名無しさん:2009/07/20(月) 10:44:34
1行1動作厳守

{
int i;
i = 0;
int rep;
rep = 1;
for(; i < rep;) {
〜〜〜
++i;
}
}
716デフォルトの名無しさん:2009/07/21(火) 11:22:16
>>715
{
int rep
= 1;
for (
int i
= 0; i < rep;
++i) {
...;
}
}
717デフォルトの名無しさん:2009/08/21(金) 19:16:31
void scale(int *w int *h, int toWidth)
{
 while(*w > toWidth)
 {
   *w--;
   *h--;
 }
}
718デフォルトの名無しさん:2009/10/11(日) 11:16:52
jmp_buf や using namespace をグローバルに置く
719デフォルトの名無しさん:2009/10/11(日) 16:15:37
色や座標定義なんかでありがちだけど、定数や構造体の構造自体が洗練されていない。
機能的な重複、フィールド細かくなりすぎて多すぎ。
これやってしまうと、巨大で無駄が多くて明示性に欠けるものになるね。
720デフォルトの名無しさん:2009/10/13(火) 22:51:22
RAIIにこだわりすぎて、わけわかんない物までダミークラスでラップされている。
せめて、対になってない処理をRAIIで扱うのはやめてほしいな。
721デフォルトの名無しさん:2009/12/09(水) 22:31:00
5MByte超のソースファイルがある。
722デフォルトの名無しさん:2010/02/20(土) 05:30:51
>>718
stdは許して
名前かぶるようなの使わないから!
723デフォルトの名無しさん:2010/02/20(土) 08:54:07
GlobalHeader.hpp
using namespace std;
724デフォルトの名無しさん:2010/03/13(土) 20:17:52
>>712
ツボったw
725デフォルトの名無しさん:2011/05/06(金) 13:21:46.84
おいらのクラスは13000行
726 忍法帖【Lv=2,xxxP】 :2011/06/07(火) 01:59:02.98
test
727 忍法帖【Lv=2,xxxP】 :2011/06/07(火) 22:22:44.51
????
728 忍法帖【Lv=3,xxxP】 :2011/06/09(木) 22:04:16.04
WIN200
729 忍法帖【Lv=3,xxxP】 :2011/06/21(火) 23:08:32.29
test
730 忍法帖【Lv=15,xxxPT】 :2011/06/24(金) 18:17:38.85
クラスのクラスをクラスのみんなと作ったよ
731 忍法帖【Lv=9,xxxP】 :2011/07/07(木) 01:26:10.34
test
732 忍法帖【Lv=2,xxxP】 :2011/07/12(火) 12:59:56.49
test
733 忍法帖【Lv=40,xxxPT】 :2011/07/18(月) 04:08:30.36
test
734 忍法帖【Lv=7,xxxP】 :2011/07/20(水) 07:10:23.16
test
735デフォルトの名無しさん:2011/08/22(月) 23:32:26.03

ё∋→ З З З 〜
 ∪
蜂の屁
736デフォルトの名無しさん:2011/08/28(日) 07:05:16.13
if(i == (int)NULL)
737デフォルトの名無しさん
本当のハンガリアンを知ったのは会社を辞めた後だったな
何か違うと分かっていたけど、惰性でシステムハンガリアンで書いていた

>>53
俺は左に定数、右に関数の変体コードを書いていたよ