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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
グローバル変数の話題は禁止。

過去スレ
ぱっと見て「ヘタだなぁ」と思うコード
http://pc8.2ch.net/test/read.cgi/tech/1141867015/
ぱっと見て「ヘタだなぁ」と思うコード その2
http://pc8.2ch.net/test/read.cgi/tech/1142741989/
2デフォルトの名無しさん:2006/06/11(日) 09:35:43
goto で 2GET!
3デフォルトの名無しさん:2006/06/11(日) 11:29:05
どんなに頑張ってもグローバル変数を使う奴は奇形。
4デフォルトの名無しさん:2006/06/11(日) 11:33:16
じゃぁ、オレ貴兄じゃん?
5デフォルトの名無しさん:2006/06/11(日) 11:35:40
>>1
「禁止」じゃなくて、せめて「専用スレを立ててやってください」ぐらいの表現にしようよ
6デフォルトの名無しさん:2006/06/11(日) 11:36:28
>>4
しょうがないな。
7デフォルトの名無しさん:2006/06/11(日) 11:37:40
だいたいパッと見下手糞なコードの100%がグローバル変数が使ってあるんだからしょうがないだろ。
8デフォルトの名無しさん:2006/06/11(日) 11:54:59
ただ煽りたいだけじゃねーの?
グローバル変数言ってるやつは、
9デフォルトの名無しさん:2006/06/11(日) 12:42:03
ライブラリで使ってるんだから、グローバル変数使ってるだけで、
へたと決め付けるのはいかがなものかと。
10デフォルトの名無しさん:2006/06/11(日) 12:54:15
>>8
gotoと同じく使わないのが常識だからな。
最近プログラムを始めたばっかりのボーヤはどうやら知らないらしい。
11デフォルトの名無しさん:2006/06/11(日) 13:23:47
>>10
gotoはたまに使うよ。
以下は例としてイマイチだけど、「共通のエラー処理を一箇所でやりたい」場合には使える。

int WriteLog(char* Message) {
 FILE *LogFile;
 LogFile = fopen("result.log", "a");

  if (NULL == LogFile) {
   goto ERROR_BREAK;
  }

 if (0 > fprintf(LogFile, "%s\n", Message) {
   goto ERROR_BREAK;
 }

  fclose(LogFile);
 return 0;

ERROR_BREAK:
 printf("Logging FAILED!\n");
 fclose(LogFile);
 return 1;
}
12デフォルトの名無しさん:2006/06/11(日) 13:34:36
多重break代わりにもなるよね。
13デフォルトの名無しさん:2006/06/11(日) 13:35:21
>>11
その構成で1000行とかやられると死ぬ。
行数が短い分にはなにやってもかまわない。
と、俺は思ってる。

ループの中でcontinueとかbreakとか
関数の中でif(!条件)ならreturnとか普通にやっちゃうよ。俺も。

でも、これ、行数が長すぎると駄目。
1411:2006/06/11(日) 13:44:36
>>12
その使い方は(漏れは)あんまりしないけど、アリな希ガス。

>>13
……goto地獄の経験者か。
さすがに1関数はテキストエディタ1画面分に押さえ込むから
上の書き方はカンベソしてくだちい。
15デフォルトの名無しさん:2006/06/11(日) 13:44:53
yaccとか lexって goto文使ってなかったっけ?
16デフォルトの名無しさん:2006/06/11(日) 13:47:48
エラー処理を関数内関数で行うようにして(VCだと関数内クラス内関数、みたいにしないと無理だが)

return(ERROR_BREAK(LogFile));

ってすれば良くない?
17デフォルトの名無しさん:2006/06/11(日) 13:54:13
>>16
それはファイルオープンどこに書けばいいんだよ。
1811:2006/06/11(日) 13:56:46
>return(ERROR_BREAK(LogFile));

入れ子関数ってGCCの拡張機能だった希ガス。
www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_4.html

。・゚・(ノД`)・゚・。 ほかのコンパイラでも行けるんなら漏れもそうしたいYO!
19デフォルトの名無しさん:2006/06/11(日) 13:58:26
>>13
理由も無く1000行とかなってる時点で
その他がどんなにまともでも下手なコードだし。
20デフォルトの名無しさん:2006/06/11(日) 14:01:46
>>19
だから、短いんならどんなことしたっていいと思うよ。俺は。
21デフォルトの名無しさん:2006/06/11(日) 14:05:49
ループの中でcontinueとかbreakとか
関数の中でif(!条件)ならreturnとか
がダメなんじゃなくて、
関数が長いのが根本的にダメなんじゃないの?

長い関数内でgoto使うなじゃなくて、
長い関数書くなが正解。
22デフォルトの名無しさん:2006/06/11(日) 14:09:11
>>21
どうだろうね?
例えば、単純なifのみで長くなるんならそれはそれでいいのかもしれないぞ。
ネストもそんなになくて、ただ、初期設定っぽい処理がだらだら長くなるだけとか。
23デフォルトの名無しさん:2006/06/11(日) 14:12:56
>>22
それはどこのWinMain()ですか?

まああの辺なら多少長くてもいい気はするけど。
24デフォルトの名無しさん:2006/06/11(日) 14:14:10
>>23
Win32Apiの関数は全部そんな感じだな。
まともに短く切ってると関数1つにつき1つラッパーを作らないと駄目なぐらいだ。
25デフォルトの名無しさん:2006/06/11(日) 15:52:45
26デフォルトの名無しさん:2006/06/11(日) 15:56:11 BE:74885235-#
>>15
それは人間が読み書きするコードじゃないから、問題ないよ。
27デフォルトの名無しさん:2006/06/11(日) 16:48:12
関数が長くなるのはCなんて低脳言語いつまでも使ってるから
28デフォルトの名無しさん:2006/06/11(日) 16:49:41 BE:319507788-#
ほかの言語だってひどい。
29デフォルトの名無しさん:2006/06/11(日) 16:51:46
どうでもいいけど、>>10のような処理はGoto文を使わないと書けないんだけど。
お前らどうやってまとめて処理するの?
実務経験のない奴はだまっておいてね。
30デフォルトの名無しさん:2006/06/11(日) 16:58:57
>29
できるだけ、Cを使わないようにする。
Windowsなら、構造化例外を使う。
31デフォルトの名無しさん:2006/06/11(日) 17:01:59 BE:59908234-#
>>11 は、NULLを左に置いたり、fclose()に渡したり、いかにも半可通って感じだな。
32デフォルトの名無しさん:2006/06/11(日) 17:07:44
>>29
gotoの全てが悪いとは言わない。が、>>25の例が明らかに悪いのはおまえにも分かるだろう?
gotoは例外処理と同じで、使いどころが分かってない奴には使わせないのがいい。

>>25
あれでマンセーされたのが>>750の不幸だった。
昔の時点で矯正されていたら今頃はもう少しまともだったろうに。
初心者のネタとマジを見抜けないと悲惨だ。
33デフォルトの名無しさん:2006/06/11(日) 17:42:24
>>29
こういうのは長くなるとやっかいな飛び方をするようになる。
短いときはどう書いてもいいけど・・・って話になるからやっぱり
gotoを使うなってより長い関数を作るなってほうが重要だと思う。
初期化も長くなったときはちゃんと終了用(初期化失敗用)の関数を用意したほうがいいと思う。
つまり>>16みたいな形にする。
34デフォルトの名無しさん:2006/06/11(日) 18:14:37
21世紀にもなってまだgoto論争やってんの?
お前ら馬鹿だろw
35デフォルトの名無しさん:2006/06/11(日) 18:52:06
原理主義ってのはそういうもんです。
中東の現状を見ても分かるでしょ。
36デフォルトの名無しさん:2006/06/11(日) 19:01:03
goto論争に終わりは無い
グローバル変数、TRUE(FALSE)、最適化等も同様
37デフォルトの名無しさん:2006/06/11(日) 19:11:08
本物のプログラマはgotoを恐れずに使う。
38デフォルトの名無しさん:2006/06/11(日) 19:16:30
今更、FORTRAN使いたくねー
39デフォルトの名無しさん:2006/06/11(日) 20:06:49
1つの関数内でgotoを100個以上乱用してるソースがあって、
その関数からgotoを無くすのに凄まじく時間が掛かった経験がある。
まじで殺意を覚えたよ
40デフォルトの名無しさん:2006/06/11(日) 20:11:12
コードジェネレータでも使ったんじゃないの?
41デフォルトの名無しさん:2006/06/11(日) 20:11:31
まさにgoto地獄
42デフォルトの名無しさん:2006/06/11(日) 20:18:34
>>39
gotoより関数の行数が長いことのほうが駄目じゃね?
43デフォルトの名無しさん:2006/06/11(日) 20:22:58
gotoを100個以上なら普通は100行以下とは考えないw
44デフォルトの名無しさん:2006/06/11(日) 20:23:14
無くす作業の必要性がよく分からん。
普通放置するか、新しく書き直すだろう。
45デフォルトの名無しさん:2006/06/11(日) 20:25:55
ディスアセンブル結果をそのままCに書き下したとか?
46デフォルトの名無しさん:2006/06/11(日) 20:49:12
>>31
こっちよりはまだマシと思われ

if (LogFile = NULL)
4739:2006/06/11(日) 20:56:38
スタックを大量に使ってて、しかも再帰呼び出しだったんで
スタックオーバーフローする危険があったんで
goto無くして再帰をループに変更する方法しか思いつかなかった。
48デフォルトの名無しさん:2006/06/11(日) 20:58:36 BE:59908234-#
>>46
やっぱり半可通だった。
49デフォルトの名無しさん:2006/06/11(日) 21:00:13
>>47
うむ。
まったくよくわからん。
50デフォルトの名無しさん:2006/06/11(日) 21:04:29
>>48
素でどこら辺が半可通なのかがよくわからん。
その程度書き間違えるのは頭が可哀想な子だよね、とか?
5139:2006/06/11(日) 21:08:26
わからんかな。すまん、漏れ自身もヘタなのかもしれんw
52デフォルトの名無しさん:2006/06/11(日) 21:30:05
>>11
「ヘタだなぁ」と思うコードの例か?

おまえの環境は知らんけど、俺の環境では fclose() に NULL を渡した
ときの挙動はドキュメントにない。

あと、fprintf() でエラーチェックしてるくせに、fclose() でエラー
チェックしないのはバグと言われてもしょうがないレベルだと思うぞ。

まあ、stdout にエラーメッセージを表示するなんてことは普通やらん
が仕様ならしょうがないかもな。
53デフォルトの名無しさん:2006/06/11(日) 21:35:03
昔if (0 == x)か if (x == 0)かで大喧嘩してるところあったな
54デフォルトの名無しさん:2006/06/11(日) 21:35:03 BE:279569478-#
>>50
左に定数を置くスタイルは昔から是非が議論されてるけど、
そのあたりの議論を把握してないで、そのスタイルを採用して
そうだから「半可通」。
55デフォルトの名無しさん:2006/06/11(日) 21:36:57
>>52
言われてわかった。正直すまんかった。
56デフォルトの名無しさん:2006/06/11(日) 21:38:31
>>53
そういう意味じゃなくて>>52はコードバグってると言いたいと。
57デフォルトの名無しさん:2006/06/11(日) 21:42:36
……書き方の方も突っ込みあったのな。

とにかく漏れがアホであることは間違いなかったので済まん。
58デフォルトの名無しさん:2006/06/11(日) 21:46:06
いや
「頭脳明晰な俺が『fclose() に NULL を渡す経路がある』と
読み間違えるからgotoは使っては駄目なんだ」
と言いたいのでは?
59デフォルトの名無しさん:2006/06/11(日) 22:16:37
int WriteLog(char* Message) {
 FILE *LogFile;
 LogFile = fopen("result.log", "a");

  if (NULL == LogFile) {
   goto ERROR_BREAK1;
  }

 if (0 > fprintf(LogFile, "%s\n", Message) {
   goto ERROR_BREAK2;
 }

  fclose(LogFile);
 return 0;

ERROR_BREAK2:
 fclose(LogFile);

ERROR_BREAK1:
 printf("Logging FAILED!\n");
 return 1;
}

ってかおまい、エラー処理でgoto 使ったことないだろ。
60デフォルトの名無しさん:2006/06/11(日) 23:10:25
> ERROR_BREAK2:
> ERROR_BREAK1:

こんな意味のない名前をつける奴は「ヘタだなぁ」と思う。
61デフォルトの名無しさん:2006/06/11(日) 23:23:14
意味はあるだろ。お前の一言がヘタだよ
62デフォルトの名無しさん:2006/06/11(日) 23:37:44
>>59
なんか飛び先が2つになった時点で全然綺麗に見えなくなってきた。
そういうコードになるならわざわざgoto使う意味がわからない。
63デフォルトの名無しさん:2006/06/11(日) 23:44:07
識別子に連番を使うのは総じて下手
64デフォルトの名無しさん:2006/06/11(日) 23:47:55
コンパイラの仕事はコンパイラに任せればいいと思うよ。
65デフォルトの名無しさん:2006/06/11(日) 23:48:24
それは
int WriteLog(char* Message) {
 FILE *LogFile;
 LogFile = fopen("result.log", "a");

  if (NULL == LogFile) {
   goto ERROR_BREAK;
  }

 if (0 > fprintf(LogFile, "%s\n", Message) {
fclose(LogFile);
   goto ERROR_BREAK;
 }

  fclose(LogFile);
 return 0;


ERROR_BREAK:
 printf("Logging FAILED!\n");
 return 1;
}
とどう違う?
66デフォルトの名無しさん:2006/06/11(日) 23:49:05
下手とか上手だとか、コンパイルしてしまえば、みんな同じだと思うよ。
67デフォルトの名無しさん:2006/06/11(日) 23:50:24
そういう事を話しているのでは無いのだよ
68デフォルトの名無しさん:2006/06/11(日) 23:51:04 BE:119816238-#
>>59
飛び先が二つあるのと、fclose(...)が二箇所になってしまってるのが、いまいちだな。
69デフォルトの名無しさん:2006/06/11(日) 23:51:33
基本は
if(LogFile){
fclose(LogFile);
}
でいいんじゃないか。
70デフォルトの名無しさん:2006/06/11(日) 23:53:55
はじめに
FILE *LogFile = NULL;
にして閉じるときに
if(LogFile)fclose(LogFile);
ってやればいいんだろ?

つーか、それにしたってちょっとつまづくだけで
飛び先2つにしたりアホな改変やるやつがいるってことがわかった。
やっぱりgotoは駄目だな。
71デフォルトの名無しさん:2006/06/11(日) 23:54:05
pascal使えば?
72デフォルトの名無しさん:2006/06/11(日) 23:57:16 BE:49923252-#
do {
 ...
 if (エラー判定1) break;
 ...
 if (エラー判定1) break;
  ...
  return;
} while(0);
...
エラー処理
return;

これなら、goto使わずに、エラー処理まで飛ばせるけど、
goto使ったほうがましか。。。


73デフォルトの名無しさん:2006/06/11(日) 23:57:27
>>70
LogFile の初期化は不要
>やっぱりgotoは駄目だな。
「使うのが難しい」という事と「使うのが駄目」は同じでは無いよw
74デフォルトの名無しさん:2006/06/11(日) 23:58:02
つか、ブロック抜ける時にはデストラクタ走るのが保証されてるわけで。
75デフォルトの名無しさん:2006/06/11(日) 23:58:28
>>69
俺もそうするか、もしくは fopen() できなかったら
エラーメッセージ吐いてすぐリターンかな。

多くの場合は、fopen() のエラーと fprintf()/fclose() の
エラーでは、対応方法が違うからメッセージ変えたほうが親
切だし。
76デフォルトの名無しさん:2006/06/11(日) 23:59:59
>>73
いや、でも、一瞬そうするしかないような錯覚に陥らせるのも事実だし、
初期化の方法が複雑になったときに確かに飛び先を分岐させるとかそういう方向へ
いってしまうことが十分考えられる。

最初に出たgotoの初期化失敗時の記述はたしかに綺麗と言えばそうだったが、
なんの拡張性ももたないコードなのかもしれないとちょっと思った。
77デフォルトの名無しさん:2006/06/12(月) 00:01:11
>>73
fopenする前にエラー処理に飛ばされる可能性も考えると、
初期化しといた方がいいな。
78デフォルトの名無しさん:2006/06/12(月) 00:05:57
goto文論争もいいけど、C言語で書かれるとちっとも分かりません。
誰にでも分かるVBにしませんか?
79デフォルトの名無しさん:2006/06/12(月) 00:06:30 BE:174731257-#
マクロで、TRY...CATCH...FINALLYみたいのを作ってるのを
見たことあるけど、あれもイマイチだしなぁ。
80デフォルトの名無しさん:2006/06/12(月) 00:07:42
finallyはどうやって実装するんだろうか。returnも置き換えるのかな?
81デフォルトの名無しさん:2006/06/12(月) 00:08:04
>>74
流れ的にCの話をしているんだと思うが。
C++の話なら迷わず例外を投げるはずだ。
82デフォルトの名無しさん:2006/06/12(月) 00:08:44
>>80
コンパイラがC++0xに準拠するまで待つw
8373:2006/06/12(月) 00:09:30
>>76
関数自体に拡張性を持たせるべきと思うなら
あの関数自体のインターフェースに文句をつけるべきでは?
>>77
一部で防衛的プログラミングと呼ばれている手法ね。
「ローカル変数も全て初期化すべき」とかいう考え方に似ているねw
凝集度という言葉を知っていますか?
84デフォルトの名無しさん:2006/06/12(月) 00:11:38
>>83
ええ?
インターフェースが変わると変わっちゃうコードかなぁ?
なんかおかしなこといってねぇ?
85デフォルトの名無しさん:2006/06/12(月) 00:14:41 BE:139784674-#
>>80
http://www.atmark.gr.jp/~s2000/r/rtl/try.html

returnは使えない。
returnもマクロ化すれば使えるだろうけど、こういうマクロはかえって、
バグの温床になりそうで、使えない。。。
86デフォルトの名無しさん:2006/06/12(月) 00:15:30
今こそ、javaのファイナライザを使うとき!
87デフォルトの名無しさん:2006/06/12(月) 00:22:00
基本0初期化+最後に0かどうかのチェックで構わないと思うが、

int WriteLog(char* Message) {
 /* 2006-06-12 引数チェック追加 */
 if(Message == 0){
  goto ERROR_BREAK;
 }

 FILE *LogFile = 0;
 LogFile = fopen("result.log", "a");
 if (NULL == LogFile) {
  ERROR_BREAK;
というようなメンテナンスされると無力なんだよな。
8883:2006/06/12(月) 00:22:16
>>84
おかしな事を言っているつもりは無いけど。
>>76 が「拡張性」って錦の御旗のような言葉を使ったから
少しはぐらかしてみただけだよ。
単にYAGNIって言えば良かった?
89デフォルトの名無しさん:2006/06/12(月) 00:22:54
>>85
ラベル使ってるのか。同じスコープ内で使ったら見つからないバグとして現れそうだな・・・。

俺もsetjmp使った例外機構モドキ作ったことあるけど、
その上でsetjmpやgotoを使う場合を考えると、どうしても実用化には持ち込めなかった。
90デフォルトの名無しさん:2006/06/12(月) 00:23:34
>>88
お前もう黙っとけw
9188:2006/06/12(月) 00:28:52
>>90
レス貰ったから礼儀として返答しただけだけど。
他の方のレスが無ければ黙っていますよw
92デフォルトの名無しさん:2006/06/12(月) 00:32:18
>>85
そうだね。端的に言って流れを飛ばすマクロは利点に比べて副作用が大きすぎるように思う。
93デフォルトの名無しさん:2006/06/12(月) 00:34:33
>>87
ローカル変数って関数のショッパナで宣言&初期化なるんじゃなかったっけ?
94デフォルトの名無しさん:2006/06/12(月) 00:38:09
一応「言語に依存する」と言っとく。

ただしスレの流れ的には、C言語が対象のようなので、おまえは当分
ROM っとけと思う。
95デフォルトの名無しさん:2006/06/12(月) 00:45:13
>>94
え?で?どっちなの?
96デフォルトの名無しさん:2006/06/12(月) 00:50:59
言語によって関数/ブロックの先頭以外にも書けたり書けなかったりする。
Cでも規格によって書けたり書けなかったりする。
97デフォルトの名無しさん:2006/06/12(月) 00:52:10
>>93
(古い)C言語ではそう。
最近のコンパイラは平気でC99なコード通したりするけどな。
98デフォルトの名無しさん:2006/06/12(月) 01:24:28
で、一連の論議の結果、
穴の相手ないスクール水着は脱げるのか脱げないのか、どっちになったのだね
99デフォルトの名無しさん:2006/06/12(月) 01:27:52
言語によって脱げたり脱げなかったりする。
100デフォルトの名無しさん:2006/06/12(月) 01:53:21
グローバルとgotoはNGワードにしようよ

議論がループして面白くないよ
101デフォルトの名無しさん:2006/06/12(月) 02:20:02
コールバック関数に追加のデータを渡せない、
コールバック関数を受け取る非メンバ関数。

  int hoge( int (CALLBACK*)(void) );

こーいうのがあるとグロー○ル変数を使わざるを得なくなる。
102101:2006/06/12(月) 02:24:32
しまった*が逆だ。
  int hoge( int (*CALLBACK)(void) );
103デフォルトの名無しさん:2006/06/12(月) 04:31:18
foo(){
   int ret = 0;
   if(!init1()) goto fin1;
   if(!init2()) goto fin2;
   if(!init3()) goto fin3;
   if(exec()) ret = 1;
   exit3();
fin1: exit2();
fin2: exit1();
fin3; return ret; }
bar(){
   int ret = 0;
   if(init1()){
       if(init2()){
           if(init3()){
               if(exec())
                   ret = 1;
               exit3();
           }
           exit2();
       }
       exit1();
   }
   return ret; }
baz(){
   if(!init1()) return 0;
   if(!init2(){ exit1(); return 0; }
   if(!init3()){ exit2(); exit1(); return 0; }
   if(!exec()){ exit3(); exit2(); exit1(); return 0; }
   exit3(); exit2(); exit1();
   return 1; }
104デフォルトの名無しさん:2006/06/12(月) 04:58:00
グローバル変数もgotoも
インデントはタブにすべき、スペースにすべきいってる奴といっしょ。
てか何年前から同じこと話してるの。
でも、馬鹿は自分の方法が絶対に正しいと信じて疑わないんだよな。
タブ使いたきゃタブ使えばいいし、スペースがよかったらスペース使え。

結論も出たところでグローバル変数以外の話題どうぞ↓
105デフォルトの名無しさん:2006/06/12(月) 05:12:32
あなたはどのタイプ?

if(a==2){
}

if(a == 2){
}

if (a == 2) {
}

if ( a == 2 ) {
}

if ( 2 == a ) {
}
106デフォルトの名無しさん:2006/06/12(月) 05:25:31
if (a == 2) {
}

理由は もし A が 2 なら という言葉と順序が同じだから意味わかりやすい。
107デフォルトの名無しさん:2006/06/12(月) 06:21:07
議論の無限ループを避けるため、単純に空白の場所だけの比較(最後のは除く)として、
>>106と同じ。
・制御文の後の"(”との間は空ける
・関数の関数名と"(”との間は詰める
が対になったコーディング規約に慣れてるため。慣れだけなんだが。
あと、"()”の内側の空白は、条件が長めになったときに冗長なだけで、見やすくもなんともないので
省略する習慣。これまた習慣だけ。
108デフォルトの名無しさん:2006/06/12(月) 07:31:56
>>107
俺は

if(a == 2){

だな。
別にaと==の間とかも空けなくてもいいと思ってるけどなんか空けてる。
この辺はホントなんとなくなのでどうでもいいっちゃどうでもいい。

ただ、ifと(の間を開けてるコードとかはなんかむかつく。
この辺もなんかむかつくだけなのでどうでもいいっちゃどうでもいい。

別に下手だとは思わないけどな。
109デフォルトの名無しさん:2006/06/12(月) 08:08:47
つーか好みの差だろwwグローバル変数とかgotoとかよりももっとどうでもいい話だwww
110デフォルトの名無しさん:2006/06/12(月) 10:02:13
class T{
  int m_hoge;
public:
  int get_hoge(){return m_hoge;}
  void set_hoge(int v){m_hoge = v;}
};
いちいちgetとsetを使ってるのは下手糞なコードだと思う。
なんかクラスっぽくないし。

これは、
class T{
  int m_hoge;
public:
  int Hoge(){return m_hoge;}
  void Hoge(int v){m_hoge = v;}
};
こうやるのがオブジェクトとゆうクラスっぽくてカッコいいと思うよね。だけどなぜか
少数派っぽいのよね・・
111デフォルトの名無しさん:2006/06/12(月) 10:23:03
カッコの内側を空けてるやつなんか、いかにもヘタそう。
お里が知れるっていうか。
112デフォルトの名無しさん:2006/06/12(月) 10:39:22
>>110
確かに後者の方がスマートだが、C++初心者が見たら「邪道だ」と言いかねない様な気がする。
113デフォルトの名無しさん:2006/06/12(月) 10:43:13
>>110
動作を関数名にするのはCからの流れというか、
たしかに下のほうがクラスっぽくはあるけどね。

>>111
同一プロジェクト内で統一されてれば文句はないなぁ。
114デフォルトの名無しさん:2006/06/12(月) 10:49:03
お前らは字面の話しかできんのか
115デフォルトの名無しさん:2006/06/12(月) 10:52:51
値変更する度にコンストラクタ呼ぶのか?
116デフォルトの名無しさん:2006/06/12(月) 10:53:33
117デフォルトの名無しさん:2006/06/12(月) 10:54:48

if((a & 0x0400) == 0x0400){
}

こんなコードを見たことがある
118デフォルトの名無しさん:2006/06/12(月) 10:57:43
なんだ、このスレは『ぱっと見でヘタだなぁと思うコードを晒すスレ』じゃなくて『ヘタなコードを書く人間が集まるスレ』じゃないか。
119デフォルトの名無しさん:2006/06/12(月) 10:59:10
おまえもその一人ということだ
120デフォルトの名無しさん:2006/06/12(月) 11:01:22
>>118 = 改行もできない下手な文章を書く人間
121デフォルトの名無しさん:2006/06/12(月) 11:01:32

漏れには

「ちょっとだけ新しいことを覚えて分かったつもりの半可通が自分よりへたっぽい香具師を見つけて喜ぶスレ」

に見える
122デフォルトの名無しさん:2006/06/12(月) 11:02:16
115にはワロタ
123デフォルトの名無しさん:2006/06/12(月) 11:03:29
>>113
> 同一プロジェクト内で統一されてれば

あえてそんなルールにする意味がわからない。

124デフォルトの名無しさん:2006/06/12(月) 11:27:28
>>121
どのレスらへんが?
125デフォルトの名無しさん:2006/06/12(月) 11:29:39
全部
126113:2006/06/12(月) 11:29:55
>>123
それが好きな人もいるかもしれない。
スペースの空け方は好みの問題でしょ。
ちなみに自分のとこは

if (a == 2) {
}

で統一されてる。
127デフォルトの名無しさん:2006/06/12(月) 11:37:22
var = sqrt( a * a + b * b );
これって、スペース打つの疲れない?
128デフォルトの名無しさん:2006/06/12(月) 11:39:53
ifの右にスペースはキモイな
129デフォルトの名無しさん:2006/06/12(月) 11:46:46
>>101
それは・・・誤り。
その引数を「引数としたいデータのポインタをメンバーとする構造体のポインタ」
とすればグロー○ル変数は使わずに済む。
#自分は決してそんな事はしないけど
130デフォルトの名無しさん:2006/06/12(月) 12:30:49
>>126 でもまともな書籍のコードとか、世間である程度以上の評価を得てる
プロダクトのコードで、カッコの内側を空けてるスタイルなんて見たこと無いもん。
ネットでいかにも素人くさいやつが書いてるのはたまに見るけど。

カッコの内側を空けるのがすきなやつって、普段どんな本やコードを読み書きしてるか
想像付くよな。
131デフォルトの名無しさん:2006/06/12(月) 12:34:38
>>130
そういえば、ずっと前に見たことあるなぁ。
132デフォルトの名無しさん:2006/06/12(月) 12:36:02
>カッコの内側を空けてるスタイルなんて見たこと無い
信じがたいな。その経験でよく偉そうに語れたものだ。
Boostでも検索してみろ
133デフォルトの名無しさん:2006/06/12(月) 12:44:08
>>130
下手なヤシが括弧の内側を空けなかったからと言って、上手くなるわけでもない。
上手いヤシが括弧の内側を空けたからと言って、下手になるわけでもない。

単に見る人の主観の問題なのに、
プログラミングレベルにこじつける神経が理解できない。
134デフォルトの名無しさん:2006/06/12(月) 12:50:08
>>110
横道にそれるが、これだとm_hogeをプライベートにしてる意味無くね?
135デフォルトの名無しさん:2006/06/12(月) 12:54:18
>>134
もともとC++の特性を学ぶ為に作られたコードだから、そこまで考えて書いたコードじゃないんじゃね?
136デフォルトの名無しさん:2006/06/12(月) 12:58:26
メンバ変数は常にプライベート
これ常識
137デフォルトの名無しさん:2006/06/12(月) 13:25:39
>>136
(25) public variable
インスタンス変数は,極力publicにせず,妥当なアクセスメソッドを設けること.
理由: オブジェクト指向の標準.クラスの内部状態に勝手にアクセスさせるのはよくない.ただし,以下の条件をすべて満たす場合,インスタンス変数をpublicにし,直接アクセスさせてもよい.
l そのインスタンス変数が他のインスタンス変数と独立であり,単独で変更されても内部の整合性をくずさない.
l どちらにしても,getX()/setX() メソッドを書く.
l インスタンス変数の実装が将来に渡って変更されないことが根拠付けられる.
また,上記に当てはまらない場合でも,極度に速度を気にする場合は,この限りではない.(ただし,慎重にコメントすること)
例: Stackクラスにおいて,itemCount属性をpublicにしてはならないが,Pointクラスにおいてx, yをpublicにしてもいいかもしれない(極端に速度を気にする場合, ex. Java3D の Vector/Point クラス).
138デフォルトの名無しさん:2006/06/12(月) 13:28:51
正直スペースの入れ方は統一できてない。

if( a==0) とか、if( a+b > 1 ) とか、if (a - b >0)

なんてのが俺のコードには混在している。
でもこの程度の判定文で不統一でも何も困らない。
139デフォルトの名無しさん:2006/06/12(月) 13:43:58
>>117

複数のフラグ(ビット)が全部TRUEか調べたいときそういうふうに書かいたりしないか?
140デフォルトの名無しさん:2006/06/12(月) 13:44:13
if( a==0) if (a - b >0)
これは酷い。
141デフォルトの名無しさん:2006/06/12(月) 13:49:09
>>139
しません
142デフォルトの名無しさん:2006/06/12(月) 13:58:45
ぱっとみ「ヒドイなぁ」と思うスレ
143デフォルトの名無しさん:2006/06/12(月) 14:00:53
>>141
0x0400 が 0x04A5 に変わっても ((a & x) == x) ってしないの?
即値使ってるのがダメってこと?
144デフォルトの名無しさん:2006/06/12(月) 14:11:10
よくわからんが
if(!(a ^ 0x04A5))
の方がいいのかな?
145デフォルトの名無しさん:2006/06/12(月) 14:14:08
#define FLAG_IS_AGE(f,flags) ((f)&(flags)==(flags)
146デフォルトの名無しさん:2006/06/12(月) 14:36:32
>>144
a = 0x14A5 で false になっちゃうよ。
147デフォルトの名無しさん:2006/06/12(月) 14:50:34
//----- 平方根を返す
double sroot(double x);





double sroot(double x){
  return sqrt(x);
}


これは酷い。
148デフォルトの名無しさん:2006/06/12(月) 14:57:09
さらにインラインになってなかったら鬱死
149デフォルトの名無しさん:2006/06/12(月) 14:58:42
>>145それってやってること一緒だろ
150デフォルトの名無しさん:2006/06/12(月) 15:03:24
>>147
するーと?
151デフォルトの名無しさん:2006/06/12(月) 15:08:28
>>147
後で自前のとっても速いsqrtに置き換えるつもりだったのでは?
と無理を押して擁護してみる
152デフォルトの名無しさん:2006/06/12(月) 15:28:45
>>147
自社内で共通関数ライブラリを作る時に
チェックや変換系は全て同じライブラリからの呼び出しにしたい、
でも車輪を再発明するのは嫌だ、
なんて時の苦肉の策、て感じかな。

ととても頑張って擁護してみる。
153デフォルトの名無しさん:2006/06/12(月) 15:38:38
単純にsqrtという名前が意味不明だからだろ。
154デフォルトの名無しさん:2006/06/12(月) 16:08:46
srootの方がわかりにくいyo
155デフォルトの名無しさん:2006/06/12(月) 16:22:10
素朴な疑問で、なんでroot(根)なんだろ
156デフォルトの名無しさん:2006/06/12(月) 16:47:01
フラクタルだろ。
157デフォルトの名無しさん:2006/06/12(月) 17:07:18
>>153
なんでだよ。square root (平方根)の略だろうが。
158デフォルトの名無しさん:2006/06/12(月) 20:26:52
>>143
ただでさえ意味がわからねービットフラグを16進なんかで比較していい気になってるところが
確かに気持ち悪いなぁーって思う。
しかも、複数のビットが立ってることを同時に判定してるとかわけわかんね。
これでわかりやすいコード書いてると思ってたらかなり重症。
159デフォルトの名無しさん:2006/06/12(月) 20:47:12
>>158お前はプログラマ止めた方がいいと思う
160デフォルトの名無しさん:2006/06/12(月) 20:59:49
>>145-146
えらく使いにくいマクロだなぁ、おい。

if(FLAGS_IS_AGE(a, 0x14A5))){
 ....
}

ってやるのか? (w

>>159
アフォの煽りにいちいち反応しないで、マスクしとけ。(w
161デフォルトの名無しさん:2006/06/12(月) 21:27:32
俺はちゃんと

#define IS_ENEMY 0x0001 //敵の攻撃か?
#define IS_BLACK 0x0002 //そいつ黒い?
#define IS_THREE 0x0004 //3連続?
#define IS_PIZZA 0x0008 //ドム?
#define IS_JET_STREAM_ATK (IS_ENEMY | IS_BLACK | IS_THREE | IS_PIZZA)

ってやるべきだと思うね。
162デフォルトの名無しさん:2006/06/12(月) 21:35:25
え、論点はそこだったの?
163デフォルトの名無しさん:2006/06/12(月) 21:48:38
>>162
できれば
(a & x) == x
なんて判定もわけわからんから関数かマクロにしたい。
164デフォルトの名無しさん:2006/06/12(月) 21:53:32
#define IsEqualBit(a, x) ((a & x) == x)
こんなバギーなマクロ組むくらいだったら、そのまま直に書いた方がいいと思われ。
まともな関数書く割には、大して汎用性と可読性の向上にならないと思われ。
つまりは好きにしろといったところだ。
165デフォルトの名無しさん:2006/06/12(月) 21:59:17
てゆうか、ビットフラグなんてもう辞めるべ。
32、次世代でも64しか拡張性ないし。
166デフォルトの名無しさん:2006/06/12(月) 22:10:56
マクロの引数を使うことで()で括ってないのは下手だと思う
167デフォルトの名無しさん:2006/06/12(月) 22:24:17
>>163
それはわけわからなきゃダメでしょ。
数値が何を意味するのかは別の問題。
168デフォルトの名無しさん:2006/06/12(月) 22:37:18
>>161
ドムから3連続の白い敵の攻撃を受けたって言う判定はどうするのさ?
169デフォルトの名無しさん:2006/06/12(月) 22:43:54
8バイトぽんぽん使う時代だからこそビットフラグ
170デフォルトの名無しさん:2006/06/12(月) 22:49:49
コメントに日付がはいっているやつ。
こんなの。
 /* 2006-06-12 引数チェック追加 */
171デフォルトの名無しさん:2006/06/12(月) 23:07:19
>>170
コーディング規約がどうなっていようと俺は片っ端からすべて取ることにしているw
だからどうだってんだよな。
日付なんて入れて後でどうしようってのか意図がわからない。
172デフォルトの名無しさん:2006/06/12(月) 23:11:31
つか、こういう /* 〜略〜 */ コメント、ウザスギ。
俺がちょっとこの範囲をコメントにしとこうってときに邪魔なんじゃボケ。
これも片っ端から//に変えさせてもらう。
173デフォルトの名無しさん:2006/06/12(月) 23:17:30
>>170
コード以前に、開発体制そのものが下手という例だな。
バージョン管理がなされてない。
174デフォルトの名無しさん:2006/06/12(月) 23:27:50
バージョン管理ツールが使えない状況で入れたりするけどな
175デフォルトの名無しさん:2006/06/12(月) 23:32:20
バージョン管理の出番なんてそうそうないけどな。
ふつーに物量多すぎて、ふつーに大変なだけでひたすら組みまくって、終わらないってただそれだけだけどなw
俺はそれしか経験したことないけど。
176デフォルトの名無しさん:2006/06/12(月) 23:45:42
そういう状況ならなおさらバージョン管理はしっかりやれ。
でないと出口が見えないどころか遠のいていくぞ。


と言っても、まともなマネージャがいないとそういうリソー
スが取れないんだよなぁ…。
177デフォルトの名無しさん:2006/06/12(月) 23:51:16
現状使われていないコードがコメントアウトされて残ってると鬱になるな。
部分的に古いコーディングスタイルを新しいものに変えたときとか。
そういうものが残っているコードは自分では仕様変更の経緯とか追えない状況になってるし。
178デフォルトの名無しさん:2006/06/12(月) 23:51:55
日付って検索用のメモ代わりだよ。
179デフォルトの名無しさん:2006/06/12(月) 23:53:02
>>177
正直、残ってたからなんだ。って感じなんだよね。
それでどうにかしろって言われたところですげー困るし。
無いほうがいいよ。
180デフォルトの名無しさん:2006/06/12(月) 23:56:30
>>178
ていうか、確実じゃないと意味がない。
181デフォルトの名無しさん:2006/06/13(火) 00:03:58
>>178
コミットログの方が便利だし。
182デフォルトの名無しさん:2006/06/13(火) 00:17:19
cvs annotate とか svn annotate すればいい。
183デフォルトの名無しさん:2006/06/13(火) 00:21:25
>>182
擁護するわけじゃないが、 annotate じゃ削除された行については何にも出ないよ。
コメントアウトなんかで無効にして残す場合は適切な、特に
復活させる条件についてのコメントを添えてあれば文句は無い。
184デフォルトの名無しさん:2006/06/13(火) 00:22:30
>129
どうやればコールバック関数の代わりに
構造体のポインタを渡せるのか教えて欲しい…マヂで。

まさか関数のインターフェースを書き換えるとか?
それなら素直に引数を追加しますよ。
185デフォルトの名無しさん:2006/06/13(火) 00:28:04
129は意味不明だな。
186デフォルトの名無しさん:2006/06/13(火) 00:29:38
129はVB使いでしょ
187デフォルトの名無しさん:2006/06/13(火) 00:30:51
>>184
Win32Apiのコールバックだと引数にvoid*ってあるっしょ?
そこに好きなのいれればいいんじゃね?
俺もそこにthisポインタ入れて便利に使ってるよ。

Win32Apiだと
CreateWindowExのpParamにWM_CREATEメッセージのlParamを渡せるからそこにthisポインタ突っ込んで
そのメッセージを受け取ったところでSetWindowLong、で、別のメッセージのときはGetWindowLongで
とりあえずコールバック関数でthisポインタの取得完了。
188デフォルトの名無しさん:2006/06/13(火) 00:36:10
>>187
物によって、そのユーザが自由に使えるパラメータが渡せない物もある。
コールバック関数へのポインタのみなら、渡しようがあるまい?
189デフォルトの名無しさん:2006/06/13(火) 00:36:42
>>187
はぁ?お前101嫁ねーの?Win32APIの話なんかしてねーよ。
190デフォルトの名無しさん:2006/06/13(火) 00:37:50
>>184はそういう事ができない状況で
どうすればいいのかを聞いてるんだろ
191デフォルトの名無しさん:2006/06/13(火) 00:39:02
Cってクロージャ使えないの?
192デフォルトの名無しさん:2006/06/13(火) 00:45:07
使えるわけが無いw>クロージャ
193デフォルトの名無しさん:2006/06/13(火) 00:47:07
環境依存だがスタックをいじれ
194デフォルトの名無しさん:2006/06/13(火) 00:48:05
>>193
素直にできないって言えよ。
195デフォルトの名無しさん:2006/06/13(火) 00:48:13
Cがいつできた言語だか分かってる?
196デフォルトの名無しさん:2006/06/13(火) 00:48:53
>195
LISPってCより新しいんだっけ?
197デフォルトの名無しさん:2006/06/13(火) 00:50:00
スタックを弄れって意味わかんね
198デフォルトの名無しさん:2006/06/13(火) 00:50:51
いや、意味はわかるけどどうやるの?
199デフォルトの名無しさん:2006/06/13(火) 00:57:25
C++ならクロージャもどきは使えるんだがな
200デフォルトの名無しさん:2006/06/13(火) 01:03:26
まてまて、スタックやクロージャの話を勝手に出しちゃいかん。
129は101を読んだ上で、「引数としたいデータのポインタをメンバーとする構造体のポインタ」を
渡せると言っている。きっと、正攻法な素晴らしい方法があるに違いない。
201デフォルトの名無しさん:2006/06/13(火) 01:04:34
固定長のバッファに長い文字列を・・・
202デフォルトの名無しさん:2006/06/13(火) 01:45:51
129待ちか。

まぁこれは逃亡するしか無いだろうから、もう答えは期待できないな。
203デフォルトの名無しさん:2006/06/13(火) 01:56:58
わかった!こうだ!
typedef int (*CB)(void);
typedef struct{
CB f;
void* arg;
}CB_ARG;

CB_ARG cb={foo,arg};
hoge( (int (*)(void))&cb );

引数を渡すまではできたので、
誰かコールバック内で引数を取り出してください
204デフォルトの名無しさん:2006/06/13(火) 02:01:50
>>203 それ、あぼーん確定。
205デフォルトの名無しさん:2006/06/13(火) 03:48:41
Cでクロージャを使うのは一苦労じゃのう。
206デフォルトの名無しさん:2006/06/13(火) 04:30:55
環境依存のコードはダメだよ
207デフォルトの名無しさん:2006/06/13(火) 07:08:55
>>188
あるっけ?
いまのところLPVOIDもセットで渡せる奴しかみたことないけど?
208デフォルトの名無しさん:2006/06/13(火) 11:23:57
209デフォルトの名無しさん:2006/06/13(火) 12:39:13
コーディングの話ではないが、ソースからの生成物(バイナリ、オブジェクトコード)を
バージョン管理にチェックインする人は「やれやれ」って思う。
210デフォルトの名無しさん:2006/06/13(火) 12:47:58
Cの場合は関数を生成して渡すしかないな。
処理系依存になる(そもそもセキュアな環境では無理かもしれない)
けどしかたない。
211デフォルトの名無しさん:2006/06/13(火) 21:32:56
>>196
LISP より古い高級言語って FORTRAN、ALGOL と COBOL ぐらいしかないよ。
212デフォルトの名無しさん:2006/06/13(火) 22:30:32
>>209
え?俺はするけど?
そうしないとたとえばクライアントからのクレームや問い合わせがあったときに、いちいち
開発環境をセットアップしてビルドしなきゃならないじゃん。
213デフォルトの名無しさん:2006/06/13(火) 22:37:27
ビルドスクリプト流せばいいじゃん。
214デフォルトの名無しさん:2006/06/13(火) 22:39:37
>>212
その目的には、クライアントに納品したのと同じパッケージ(メディアなりアーカイブファイルなり)を
保存しておかないのか?
215デフォルトの名無しさん:2006/06/13(火) 22:39:49
面倒なのはビルドのほうじゃなくてセットアップのほう。
216デフォルトの名無しさん:2006/06/13(火) 22:41:56
>>215
つまり、OSやコンパイラもチェックインするということか?
そこまでするのなら、HDD丸ごとバックアップ取るけど。
217デフォルトの名無しさん:2006/06/13(火) 22:42:49
>>214
もちろんするよ。
それとバージョン管理にバイナリ入れるのは、テスト機に同一バイナリを配布するのがらくだから。
また、テスト機で過去のバージョンのバイナリを簡単に取り出せるから。
218デフォルトの名無しさん:2006/06/13(火) 22:43:39
>>216
しないよ。
219デフォルトの名無しさん:2006/06/13(火) 22:46:58
あーもうまんどくせ。
1〜2週間サイクルで何度もリリースを繰り返したりする場合、バイナリがリポジトリに
入ってたほうが何かと楽なんだよ。
そうじゃない奴にどう説明しても無駄だからもうレスしない。じゃ。
220デフォルトの名無しさん:2006/06/13(火) 22:52:22
ええっ?ビルド済みのバイナリ入れてないと、パッケージングする奴が困るじゃん。
221デフォルトの名無しさん:2006/06/13(火) 22:52:58
1〜2週間サイクルで何度もリリースを繰り返すような時に、
いちいち開発環境を作り直すというのがわかんね。
222デフォルトの名無しさん:2006/06/13(火) 22:58:51
わかんないならレスしなくていいから。
完膚なきまでに屈服させないと気がすまないのか?
223デフォルトの名無しさん:2006/06/13(火) 23:00:14
つか、多数のチームで開発してるときは、バイナリ入ってないと困るでしょ。
いちいち他のチームのライブラリとかビルドしてるのか?
224デフォルトの名無しさん:2006/06/13(火) 23:04:02
各社、各チームの開発環境やポリシーが違うんだから、上っ面だけであーだこーだやっても無益だな。
てか、つまんね。
>>209 やれやれと思うんなら、こんなところで愚痴らずにチェックインした人間に文句家。
225デフォルトの名無しさん:2006/06/13(火) 23:13:57
構成管理の標準化もしてないのに愚痴られてもねぇ。
226デフォルトの名無しさん:2006/06/13(火) 23:24:33
>>211
>>196 はイヤミだと思うよ。
227デフォルトの名無しさん:2006/06/14(水) 00:16:41
>>219
でも、もうそんなパッケージは更新しないわけでやっぱりなんかガラクタが残った感があるな。
つーか、デカイ。でかすぎ。
並のでかさじゃない。
何も考えずに丸ごととってきたら俺の会社のPC死亡確定だなw
なにせヤバイ、HDDの容量がヤバイ。
このプロジェクトだけだって30GBは超えてるのに、前のバージョンまでとってくるなんてヤバイw
228デフォルトの名無しさん:2006/06/14(水) 00:34:30
CVSのようなバイナリ差分をとらないシステムだと丸ごとのコピーが溜まっていくからなー。

バイナリをダウンロードするのに余計に掛かる時間でビルドできるだろ!と思ってしまうが、
チェックアウトするメンバー全員がビルド環境を持ってるわけではない&デイリービルドしてない
ところではもはや常識ではないのだな。
229デフォルトの名無しさん:2006/06/14(水) 00:45:12
なんか日本語の不自由な方がいらっしゃいますが
230デフォルトの名無しさん:2006/06/14(水) 00:46:25
C++ならobjファイルとかはいらねぇよな。
exeだけつけときゃいいような希ガス。
libとdllは混乱の具合が半端じゃねぇし、使うべきじゃねぇとは思うけど、
実際あると一番困るのがこれのバージョン管理なんだよな。
231デフォルトの名無しさん:2006/06/14(水) 00:47:27
日本語って難しいよな。
世界で一番難しい言語らしいぞ。
232デフォルトの名無しさん:2006/06/14(水) 00:49:41
>>230
普通は、最終的な生成物だけを含めるものだよね。
233デフォルトの名無しさん:2006/06/14(水) 00:54:59
別にバイナリ入れてもいいじゃん。
何が気に入らないの?反論してる人たち。
234デフォルトの名無しさん:2006/06/14(水) 00:59:13
成果物を構成管理に含めない人たちがいることがわかりました。
235デフォルトの名無しさん:2006/06/14(水) 01:13:01
そうじゃなくてさあ、VCでコンパイルするとできるDebugとかのディレクトリの中身を
毎回そのまんまコミットする奴がいるのよ。
236デフォルトの名無しさん:2006/06/14(水) 01:18:11
>>235
拡張子でrejectしろ。出来ない構成管理ツールなら捨てろ。もうこの話やめろ。
237デフォルトの名無しさん:2006/06/14(水) 01:21:00
もっと高度な話をしてくれよ。
238デフォルトの名無しさん:2006/06/14(水) 01:27:50
ぐだぐだホイホイスレですから
239デフォルトの名無しさん:2006/06/14(水) 01:45:45
俺は不毛な議論が好きなんだよ!
GOTOとかコードの見た目の議論とか!
240デフォルトの名無しさん:2006/06/14(水) 02:48:12
えっとじゃあ、ハンガリアン記法使ってるだけで「ヘタだなぁ」と思う
241デフォルトの名無しさん:2006/06/14(水) 02:51:05
ああ、ちゃんと型が管理できる言語使うべきだよな。
242デフォルトの名無しさん:2006/06/14(水) 06:44:03
>>236
なんでそんなにこの話したくないの?
話されるとまずいの?
別に君のしたい話してるわけじゃないし、嫌ならスルーすればいいじゃない。
やめろってどういうことだよ。
243デフォルトの名無しさん:2006/06/14(水) 07:00:46
スレタイ10000000000万回嫁
244デフォルトの名無しさん:2006/06/14(水) 07:02:13
>>243
スレタイなんてあくまで話のきっかけにテーマがあればいいって程度だろ?
話題があるならそれでいいじゃん。
たかだか2ちゃんのスレで何を形成しようとしてるの?
245デフォルトの名無しさん:2006/06/14(水) 07:02:58
メタ議論がしたかったら自治スレ逝け
246デフォルトの名無しさん:2006/06/14(水) 07:04:01
>>245
はぁ?てめぇで勝手にルール作るな。
247デフォルトの名無しさん:2006/06/14(水) 07:26:40
>>244
それが2chで唯一のルール。でないと議論が分散するだろ?
おまいとおれらのためのルールなんだよ。わかってくれ。
248デフォルトの名無しさん:2006/06/14(水) 07:30:19
>>247
はぁ?だから勝手にルール作るなよ。
どこに書いてあんだよ。
ソースもってこい。
ついでに死ね。
249デフォルトの名無しさん:2006/06/14(水) 07:42:32
他人の愚行には厳しいくせに自分の愚行には甘々な困ったチャンの暴れるスレですね
250デフォルトの名無しさん:2006/06/14(水) 08:39:29
相手にした奴の負け
251デフォルトの名無しさん:2006/06/14(水) 09:18:17
そろそろネタ切れ?
252デフォルトの名無しさん:2006/06/14(水) 09:29:30
>>242
君の使ってる構成管理ツールは、拡張子ではじくことが出来るの?出来ないの?
ゴミを入れる初心者に文句言えるの?言えないの?
253デフォルトの名無しさん:2006/06/14(水) 10:12:37
うちはビルドしてテストが完了したモジュールもcvsに入れるよ。もちろん中間生成物は
入れないけど。理由は面倒くさいので説明しないけど。
254デフォルトの名無しさん:2006/06/14(水) 10:27:07
スレタイ10000000000億万回嫁
255デフォルトの名無しさん:2006/06/14(水) 10:27:51
開発用のリポジトリで生成物も管理するのはなぁ。
うちじゃ別に管理しているよ。
256デフォルトの名無しさん:2006/06/14(水) 10:28:25
>>254
それ何回?
257デフォルトの名無しさん:2006/06/14(水) 10:29:58
構成管理がダメ⇔ヘタなコード

だからいいんじゃないのか
258デフォルトの名無しさん:2006/06/14(水) 10:33:53
たしかにゴミを入れるような開発メンバーがいるようじゃ駄目駄目だな
259デフォルトの名無しさん:2006/06/14(水) 10:40:03
無駄にコメントが多いソース
260デフォルトの名無しさん:2006/06/14(水) 10:45:15
リビジョン管理しているのに、ソース内に要らなくなったロジックがコメントとして保存されているソース。
しかも、説明もなしに例えば閉じ括弧だけとか。
261デフォルトの名無しさん:2006/06/14(水) 11:08:22
削除してコミット
262デフォルトの名無しさん:2006/06/14(水) 11:10:59
>>261
だからスレタイ嫁と何度いったら(r
263デフォルトの名無しさん:2006/06/14(水) 11:12:13
int
main(argc,argv)
int argc;
char **argv:
{
return 255;
}
264デフォルトの名無しさん:2006/06/14(水) 11:21:22
265デフォルトの名無しさん:2006/06/14(水) 12:06:43
いまどきK&Rで書くなっつーことじゃね?
266デフォルトの名無しさん:2006/06/14(水) 13:09:45
そろそろK&R1st記法よりもANSIになってからの歴史の方が長いような
気がするのだが、実のところどっち?

正直K&R1stに固執する連中を理解できん。
267デフォルトの名無しさん:2006/06/14(水) 13:27:48
>>240
なんかオレが呼ばれたような希ガス
268デフォルトの名無しさん:2006/06/14(水) 13:34:13
K&Rって何?
269デフォルトの名無しさん:2006/06/14(水) 13:45:01
>>268
K&Rを知らない世代がいるとは・・・

The C programming language(プログラミング言語C)という本のこと。
著者2人の頭文字をとってK&R
270デフォルトの名無しさん:2006/06/14(水) 13:48:06
まだ初心者なんですが、
例えばSetTimer使うアプリで前回のデータとデータ比較するとき
グローバル変数使わないとできなくないですか?
プロシージャの引数増やせるなら使わないでもいいんですが…。
271デフォルトの名無しさん:2006/06/14(水) 13:53:35
>>270
スレ違い
ついでにグローバル変数使わなくてもできるよ
272デフォルトの名無しさん:2006/06/14(水) 14:01:07
こいつらのコード晒したらかなりヘタっぽいだろうな。
目の付け所がおかしいもん。
273デフォルトの名無しさん:2006/06/14(水) 14:04:35
と、自分のことを棚に上げて物を言う>>272でしたとさ
274デフォルトの名無しさん:2006/06/14(水) 14:05:58
>>270
hWndに構造体へのポインタでも仕込んどけば?
275デフォルトの名無しさん:2006/06/14(水) 14:08:39
えええええ?
276デフォルトの名無しさん:2006/06/14(水) 14:13:15
return -1;
じゃないかと邪推
277デフォルトの名無しさん:2006/06/14(水) 15:13:15
return -1とか書く奴は氏んでいいよ
278デフォルトの名無しさん:2006/06/14(水) 15:33:17
低レベルな煽りをする厨房はVIPにでも行ってろカス
279デフォルトの名無しさん:2006/06/14(水) 15:56:10
お前もな
280デフォルトの名無しさん:2006/06/14(水) 16:23:19
return 1にして欲しいところではあるな
281デフォルトの名無しさん:2006/06/14(水) 20:28:40
return "時よ戻れ!!";
282デフォルトの名無しさん:2006/06/14(水) 20:40:56
ERRORLEVEL っていつから 255 以上戻せるようになったん?
283デフォルトの名無しさん:2006/06/14(水) 21:04:10
ERRORLEVELって何?
284デフォルトの名無しさん:2006/06/14(水) 21:29:29
>>270
そんなことは無い。とだけいっておく。
後は自分で勉強しろ。
285デフォルトの名無しさん:2006/06/14(水) 22:16:17
>>282
Win32なら普通に32bitで戻せる。
286デフォルトの名無しさん:2006/06/14(水) 22:19:08
>>270
SetTimerを知らんのだけど引数がintでポインタにキャスト可能な環境なら
構造体のポインタ突っ込めば任意の情報を渡せる。
287デフォルトの名無しさん:2006/06/14(水) 22:31:02
>>270
変数 static にすればグローバルにせんでもいいんでない?
288デフォルトの名無しさん:2006/06/14(水) 22:31:45
ぱっと見て「アホだなぁ」と思うレス
289デフォルトの名無しさん:2006/06/14(水) 23:35:12
SetTimer自体は1回しか呼び出されない。
1度セットするとn_秒に1回プロシージャにタイマーメッセージを投げる。
290デフォルトの名無しさん:2006/06/14(水) 23:47:20
>>289
そういう問題じゃないじゃん。
291デフォルトの名無しさん:2006/06/14(水) 23:56:23
なんだかなぁ。自分勝手な解釈でナナメ上のコメント付けて、どんどん話をずらしていく奴が最近多いなぁ。
292デフォルトの名無しさん:2006/06/15(木) 00:02:00
   , -‐−-、  ヽ∧∧∧ //  |
.  /////_ハ ヽ< 釣れた!> ハ
  レ//j け ,fjlリ / ∨∨V ヽ  h. ゚l;
 ハイイト、"ヮノハ     //   |::: j  。 >>291
  /⌒ヽヾ'リ、     //     ヾ、≦ '
. {   j`ー' ハ      // ヽ∧∧∧∧∧∧∨/
  k〜'l   レヘ.   ,r'ス < 初めてなのに >
  | ヽ \ ト、 ヽ-kヾソ < 釣れちゃった!>
.  l  \ `ー‐ゝ-〈/´   / ∨∨∨∨∨∨ヽ
  l     `ー-、___ノ
  ハ   ´ ̄` 〈/‐-、
293デフォルトの名無しさん:2006/06/15(木) 00:06:37
>>292
2ch初心者?そういうのはマ板でやってよ。
294デフォルトの名無しさん:2006/06/15(木) 00:11:28
ム板でAA使うと見事に浮くな。
295デフォルトの名無しさん:2006/06/15(木) 00:30:50
>>285
戻せるけど、俺は0〜255を戻すようにしてる。他社製のアプリケーションと連携取ったり
するときに、相手側が0〜255までしか対応してなかったことがあったりしたので。
296デフォルトの名無しさん:2006/06/15(木) 01:32:35
つ機械語使って関数の動的生成
297296:2006/06/15(木) 01:41:03
ミス
298デフォルトの名無しさん:2006/06/15(木) 05:52:27
>>295
ERRORLEVELは今でも255までだよ。
main()からは256以上でも戻せるけど。
299デフォルトの名無しさん:2006/06/15(木) 05:54:48
その流れ読まないレスはわざとなの?
300デフォルトの名無しさん:2006/06/15(木) 08:21:45
>>286
確かにunsigned intのTimerIDというものが渡せて、
イベント発生毎にTimerIDが渡ってくるので現状はそれで実現はできるが、
64bitCPUに変わったらどうなるか知らん。ってそんなとこまで考えんでもいいか。
301デフォルトの名無しさん:2006/06/15(木) 13:00:07
そんな引数弄くるなんてめちゃくちゃな方法でいいのかよw
staticに逃げるのも間違ってるだろ。
302デフォルトの名無しさん:2006/06/15(木) 13:23:12
>>301
では正解をご教授ください。
303デフォルトの名無しさん:2006/06/15(木) 13:46:34
できる。といいつつ、
でもやり方は自分で調べろ。

〜というのがここまでの流れ〜
304デフォルトの名無しさん:2006/06/15(木) 13:48:29
やれば、できる。
305デフォルトの名無しさん:2006/06/15(木) 13:59:23
俺は>>286>>300の方法でやってたw簡単だし、不具合出たこと無いしw
306デフォルトの名無しさん:2006/06/15(木) 14:15:24
引数の本来の意味や型が失われて
余計分かりにくいコードになるんじゃないの?
それ自体が不具合だ。
307デフォルトの名無しさん:2006/06/15(木) 14:30:47
ああ、いいこと思いついた










グローバル変数使えばいいんじゃね?^^;
308デフォルトの名無しさん:2006/06/15(木) 14:34:27
>>306
そんなもん、入り口ですぐに本来の型にキャストしておけばいいじゃん。
そう言った割り切りは時に必要だぞ。
#それとも、qsort()/bsearch()の比較関数さえ否定する?
309デフォルトの名無しさん:2006/06/15(木) 14:43:18
スタティックでいいだろ
310デフォルトの名無しさん:2006/06/15(木) 15:10:52
>>300
SetTimer()に関して言えば、TimerIDにデータを突っ込むのは間違い。
タイマの種類を識別するIDに、ポインタ突っ込んでどうするよ?
311デフォルトの名無しさん:2006/06/15(木) 15:23:28
柔軟な発想ができんもんかね
312デフォルトの名無しさん:2006/06/15(木) 15:30:20
WMならともかく固有のコールバック関数呼ぶなら混乱はしないだろ。
やったことねーけど
313デフォルトの名無しさん:2006/06/15(木) 15:33:20
タイマIDは0以外で他と重複しなければ何でもいい。
つまりポインタでもおk
314デフォルトの名無しさん:2006/06/15(木) 17:11:13
>まだ初心者なんですが
と断っておけばスレ違いではない、とでも
思ってるか知らんが、何で君らそういう間抜けに
付き合ってんの?
315デフォルトの名無しさん:2006/06/15(木) 18:05:02
いい加減、脊髄反射的に擬似反論レスする奴の相手やめようぜ。
>>309とか>>311とかな。こいつぜってーSetTimerなんて知らないぜ。
316デフォルトの名無しさん:2006/06/15(木) 18:06:12
>>315おまえもな
317デフォルトの名無しさん:2006/06/15(木) 18:10:35
>>310>>312こいつらも知らないくせにレスしてるからな。
318デフォルトの名無しさん:2006/06/15(木) 18:10:39
こんなゴミレスであっても一人の初心者が一つの知識を身につけられたのだとしたらこれに勝る喜びはない。
319デフォルトの名無しさん:2006/06/15(木) 18:13:11
>>315
俺はもともと相手してないけど。

>>317
だな。技術スレ以外のノイズ高すぎだなw
320デフォルトの名無しさん:2006/06/15(木) 18:31:32
314 名前:デフォルトの名無しさん[sage] 投稿日:2006/06/15(木) 17:11:13
>まだ初心者なんですが
と断っておけばスレ違いではない、とでも
思ってるか知らんが、何で君らそういう間抜けに
付き合ってんの?


315 名前:デフォルトの名無しさん[sage] 投稿日:2006/06/15(木) 18:05:02
いい加減、脊髄反射的に擬似反論レスする奴の相手やめようぜ。
>>309とか>>311とかな。こいつぜってーSetTimerなんて知らないぜ。


316 名前:デフォルトの名無しさん[sage] 投稿日:2006/06/15(木) 18:06:12
>>315おまえもな


317 名前:デフォルトの名無しさん[sage] 投稿日:2006/06/15(木) 18:10:35
>>310>>312こいつらも知らないくせにレスしてるからな。


318 名前:デフォルトの名無しさん[sage] 投稿日:2006/06/15(木) 18:10:39
こんなゴミレスであっても一人の初心者が一つの知識を身につけられたのだとしたらこれに勝る喜びはない。


319 名前:デフォルトの名無しさん[sage] 投稿日:2006/06/15(木) 18:13:11
>>315
俺はもともと相手してないけど。

>>317
だな。技術スレ以外のノイズ高すぎだなw
321デフォルトの名無しさん:2006/06/15(木) 18:36:38
>>315>>319は俺だが、それが何か。
322デフォルトの名無しさん:2006/06/15(木) 18:37:16
なお、>>319の">>315"は>>316の間違い。
323デフォルトの名無しさん:2006/06/15(木) 18:47:37
モチケツ
324デフォルトの名無しさん:2006/06/15(木) 19:26:05
314 名前:デフォルトの名無しさん[sage] 投稿日:2006/06/15(木) 17:11:13
>まだ初心者なんですが
と断っておけばスレ違いではない、とでも
思ってるか知らんが、何で君らそういう間抜けに
付き合ってんの?

といいつつ自分もつられていることにすら気づかない
大間抜けの>>314であった
325デフォルトの名無しさん:2006/06/15(木) 21:37:01
326デフォルトの名無しさん:2006/06/15(木) 21:40:48
岩尾がブサイクだ、山田花子がブサイクだって言ってるところに、ビューティーコロシアムの
出場者を連れてこられても困ります。
327デフォルトの名無しさん:2006/06/15(木) 22:45:27
そこでBCCテクニシャンの登場ですよ
328デフォルトの名無しさん:2006/06/16(金) 00:29:40
>>270
いいもの教えてやろう
SetProp
329デフォルトの名無しさん:2006/06/16(金) 03:06:20
TimerIDにポインタ突っ込むとか、SetPropその他の手段は、
使って良いものか時々悩む。
プロジェクトの初期段階でフレームワーク構築してる時とか。
330デフォルトの名無しさん:2006/06/17(土) 04:04:15
ちょっと見ない間に随分スレが伸びたな、おい。
331デフォルトの名無しさん:2006/06/17(土) 05:51:32
public double getValue(int i, int j) {
 return i == j ? 1.0 : 0.0;
}

このコードは駄目だとJAVA WORLD様はおっしゃったとさ。
332デフォルトの名無しさん:2006/06/17(土) 06:34:03
staticのどこが悪いのか解説希望
333デフォルトの名無しさん:2006/06/17(土) 08:30:48
>>331
Java よく知らんからそれが正しいかどうかは別にして

(i == j) ? 1.0 : 0.0;
i == (j ? 1.0 : 0.0);

のどっちかわかり (* にくい *) から、() つけたほうがいいと思う。

>>332
Recursive, Reentrant
334デフォルトの名無しさん:2006/06/17(土) 08:33:44
>>332
それだけ聞かれても困るが。
グローバル変数のstatic化は寧ろ歓迎すべきだし、
関数のstatic化もスコープ限定と言う意味で同様だし、
自動変数の場合にのみ状況を弁えて使わなければならないけどね。
335デフォルトの名無しさん:2006/06/17(土) 08:58:48
この話の流れで、static と聞いて誰も聞いてないスコープの知識を
披露できる君はすごいね。(w
336デフォルトの名無しさん:2006/06/17(土) 09:02:21
知識? 常識の間違いじゃないのか?
337デフォルトの名無しさん:2006/06/17(土) 10:44:53
また半角ハテナ君か
338デフォルトの名無しさん:2006/06/17(土) 11:33:02
常識だよ
339デフォルトの名無しさん:2006/06/17(土) 11:33:03
>>331kwsk
340デフォルトの名無しさん:2006/06/17(土) 11:42:34
getValue(int i, int j) という名前から
return i == j ? 1.0 : 0.0;
を予測するのは難しいということだろ。
341デフォルトの名無しさん:2006/06/17(土) 14:59:38
>>337
半角ってなんですか?
342デフォルトの名無しさん:2006/06/17(土) 15:14:45
はいはい、ワロスワロス
343デフォルトの名無しさん:2006/06/18(日) 01:50:53
そうだよね。
1バイト文字だよね。
344デフォルトの名無しさん:2006/06/18(日) 03:06:32
329と330の間がステキ
345デフォルトの名無しさん:2006/06/18(日) 11:14:50
>>333
三項演算子の優先順位は元々低いからたぶんその意見は違う。
私は()付ける派ですけど、付けない人はごろごろいるはず。

>>340
おそらくそれが正解なのだろうけど、
クラスの設計によってはそれでOKという可能性はある。

仮にもOOなのだから、
ソースの極一部だけ切り取ってこれはだめと言われてもちょっと困るかな。
346デフォルトの名無しさん:2006/06/18(日) 13:19:43
>>345
> ソースの極一部だけ切り取ってこれはだめと言われてもちょっと困るかな。
やっと正解らしきものが出たな。
完全ないちメソッドであるにもかかわらず、なにをするメソッドなのかさっぱり分からない。
わかりやすいメソッド名、仮引数名をつけましょう、というのがJAVA WORLD様の主張。

さらには「プロなら三項演算子など使わず、if文を使って見やすいコードを書く」という
驚愕の主張もなさっているが。
347デフォルトの名無しさん:2006/06/18(日) 13:42:59
例えば、
Gui.Control.ToggleButton.State.Set(state ? 1 : 0);
なんてコードもif文使った方が見やすくなると信じているのだろうか。
if (state) {
Gui.Control.ToggleButton.State.Set(1);
} else {
Gui.Control.ToggleButton.State.Set(0);
}
と書いても
int iState;
if (state) {
iState = 1;
} else {
iState = 0;
}
Gui.Control.ToggleButton.State.Set(iState);
と書いても三項演算子より見やすいとは思えないのだが。
348デフォルトの名無しさん:2006/06/18(日) 13:52:52
だから驚愕しているわけで。
349デフォルトの名無しさん:2006/06/18(日) 16:35:41
自分にはintにfloat定数を代入しているほうが
下手だなと思ってしまう
350デフォルトの名無しさん:2006/06/18(日) 16:39:40
ヒント:頭のおかしい人にはかかわらないようにしましょう
351デフォルトの名無しさん:2006/06/18(日) 16:44:21
>>347
俺は

int iState;
if (state) {
iState = 1;
} else {
iState = 0;
}
Gui.Control.ToggleButton.State.Set(iState);

こっち↑派。(即値やめるかコメント付けるかするけど)
三項演算子はなんか嫌い。
たまに自分でもどっちがどっちだかわからなくなる。
352デフォルトの名無しさん:2006/06/18(日) 17:06:56
353デフォルトの名無しさん:2006/06/18(日) 17:13:06
int iState = (state != 0) ? 1 : 0;
Gui.Control.ToggleButton.State.Set(iState);
354デフォルトの名無しさん:2006/06/18(日) 17:15:54
それはさすがに下手だと思う
355デフォルトの名無しさん:2006/06/18(日) 17:20:36
>>354

>>353 が下手で >>351 が下手じゃない理由を教えてくれ
356デフォルトの名無しさん:2006/06/18(日) 17:24:58
>>355
三項演算子を使うという立場なら、>>347のコードの方がシンプルだしわかりやすい。
また、stateの値をなにか別の概念の値に変換してセットするならともかく、同じ概念のものを経由
しているところが冗長。

三項演算子を使わないというポリシーなら>>351でいいと思うが?
357デフォルトの名無しさん:2006/06/18(日) 17:31:12
int iState = state ? 1 : 0;
Gui.Control.ToggleButton.State.Set(iState);

ならいいのかな?
358デフォルトの名無しさん:2006/06/18(日) 17:33:30
>>357
良し悪しをいってるわけじゃなくて下手だと思うかどうかであって、そのコードは>>356
全く同じ理由で下手だと思う。
359デフォルトの名無しさん:2006/06/18(日) 17:40:36
Gui.Control.ToggleButton.State.Set(state != 0);
360デフォルトの名無しさん:2006/06/18(日) 17:43:46
それでコンパイルできるんなら、それでいいんじゃね?
361デフォルトの名無しさん:2006/06/18(日) 17:45:25
三項演算子もgotoも現実問題なくても何とかなるし
嫌いな奴は意味不明なほど毛嫌いしていて
メリットがあっても絶対に使わない。
362デフォルトの名無しさん:2006/06/18(日) 17:59:57
脳みそがご老体なんだろ。
ほらよくいるじゃん、〜は〜であるべきと他人に説教する石頭の頑固じじいとか。
363デフォルトの名無しさん:2006/06/18(日) 18:09:25
よくはいねーよ。
どんな環境で生活してんだよw
364デフォルトの名無しさん:2006/06/18(日) 18:17:58
JAVA WORLD様は糞雑誌に認定されますた
365デフォルトの名無しさん:2006/06/18(日) 18:43:01
public class MyFooBar extends AbstractFooBar {
  public void getInfo(HttpResponse response) {
    super.setInfo(response);
  }
}

AbstractFooBar#setInfo() は、AbstractFooBar が持ってる情報を
responseに格納する処理。
responseにセットするという意味で、setInfo と名づけたんだろうな。

MyFooBar を書いた人は、AbstractFooBar から情報を得るという意味で
getInfo と名前を変えたんだろうな。

なんか、こう、うーん、設計からして間違ってるような。。。
366デフォルトの名無しさん:2006/06/18(日) 18:47:45
Javaのデバッガは、行内のどの位置で問題が起きたか分かるの?
漏れはVCしか使った事ない若造だけど、三項演算子は
デバッガでトレースするのがめんどいので避ける。
367デフォルトの名無しさん:2006/06/18(日) 18:49:58
>>366
素朴な疑問なんだが、>347のような三項演算子の使い方でもデバッガでトレースするの?
368デフォルトの名無しさん:2006/06/18(日) 19:15:44
>367
しますが何か。
C++だとマクロや演算子オーバーロードとか
見た目じゃ判断つかないものがあるし。

もちろんじっくり読めば、どんな書き方でも分かりますが、
仕事では書く回数より、読まねばならない回数の方が多いわけで…
書く手間を惜しむよりは、読む・追う手間を優先してます。
369デフォルトの名無しさん:2006/06/18(日) 19:20:29
>347の例だったら、どうしても短くまとめたいなら、

 Gui.Control.ToggleButton.State.Set( isNotZero(state) );

みたいにマクロかインライン関数で置換してやれば良いと思ったけど…
Javaには無かったっけ。
370デフォルトの名無しさん:2006/06/18(日) 19:26:51
あるよ
371デフォルトの名無しさん:2006/06/18(日) 20:07:34
>>365
なんかこう、下手というものとは違った、また独特な雰囲気が・・・
372デフォルトの名無しさん:2006/06/18(日) 20:24:03
三項演算子の話が出ているけど、
これは変な書き方をするとひどく汚いソースコードになってしまうので、
そうなってしまうくらいなら利用を全面的に控えさせた方がいいというだけです。

上手い奴はちゃんとうまく書く。
下手な奴は銃殺刑モノ。
373デフォルトの名無しさん:2006/06/18(日) 20:25:49
>>372
下手だと思ったら、さっさと書き直せ。
374デフォルトの名無しさん:2006/06/18(日) 20:28:46
低レベルな煽り厨が常駐してる件
375デフォルトの名無しさん:2006/06/18(日) 20:33:20
自己スレ乙
376デフォルトの名無しさん:2006/06/18(日) 20:40:01
常駐乙www
377デフォルトの名無しさん:2006/06/18(日) 21:04:30
rubyのif とか、 Haskellのif とか、 Lispのifなんかも否定するのかなあ?
378デフォルトの名無しさん:2006/06/18(日) 23:31:34
三項演算子よりも、無意味に一時変数を使う方がよっぽど下手だろう。
特に>>351とか初期化と代入がわかれてるのとか。
379デフォルトの名無しさん:2006/06/19(月) 00:13:23
>>378
ハァ?
380デフォルトの名無しさん:2006/06/19(月) 00:43:55
下手なのと自分が普段使わないからって否定してるのとを混同してるヤツがいるな

可視性が悪くとも速度を求めるとこならコードを圧縮するし、
人的エラーを回避するためならあまり見かけない書き方をすることだってある。
部分的なソースだけみて判断することなどできない。


ただ、Microsoftのサンプルは糞だが
381デフォルトの名無しさん:2006/06/19(月) 00:44:54
>>380
下手なのと自分が普段使わないからって否定してるのとを混同してるヤツだな
382デフォルトの名無しさん:2006/06/19(月) 01:00:42
Microsoftのサンプルはたまにコンパイル通らなかったりするな
383デフォルトの名無しさん:2006/06/19(月) 01:01:37
日本人的視点で糞とか言われるMicrosoftカワイソスw
384デフォルトの名無しさん:2006/06/19(月) 01:01:58
            ____
         __,,/  _, ----`ヽ  :.
     :.  / _     ___   、\
       / /   i      \   \\ :.
     :. ,'./       i  ヽ:.   ヽ:.:.. ヽ.ヽ
      ,'/    / .ハ ヽ ヽ:.:.:.:. ヽ::.. ヽヽ :.
     :. |i .i i  .i /  ヽ ト 、 \、:.:.:. ',:.',:.:.lヽ}
       |i .i l  :N_, -弋 \弌弋ナ:}:.:}
    :. |i∧ ', :{ ,ィjモト \  イjミトイイV :.  な…
       .|  :メヽ.', `ozZ}      izN。ハ::{     なんなんですか?
      :. |  :ヾ_! ゝ "゙゙    '  `゙ ハ.:', :.   ここ、どこですか?
      |  :.:_イ .:.ヽ.   (二フ , イ :.:.:!:.ヽ     なんであなたたち
   :.  / rィイ | :.:.ヽ: >r/`<ノ .:.::.}ヽ、\:.   喧嘩してるんですか?
      / ∧l;l ! :.:.:.://{二 ̄ .} ..:..::リ//ハ.:\
 :.  / .{. ',ヾ、ヽi .:.:.{ /(^`  |.:.:.:.//: : :.}: . ヽ.:.
   / /  ) ヽ ヾ、ヽ:.ハ ヤ{   ∧/.-‐'": : |:.:. i ',
  ./ .,イ .:..} : :\ヾレ'ハ ∧__ノノハヾ、  : : : l:.:.: .ハ ',
  { /| .:.:ハ : : :i Y {ヾ`Yヽニン'ノ}: : } : : : :/:.:.:/ }:.}
  V | .:.:/:.:|_,ィ' ̄  ヽ三{ `ー-ノ : イ : : :/:.:i.:{  リ
    ヽ:.:{、.:.V     : : ヘ     : : {: : :/:.::∧|
     ヽ! )人    : : :人      : : : / \! :.
      "  ヽ : : : : :/イ{     :.ノ: : : :.\ :.
       :.  \__///: :\______/: : : : : : : ヽ
           / //: : :|;|: : : : : : i: : : __: : : : ',
       :.     / 、 {;{   |;|   . : i/. : : : : : :|
          / `Y;{. . . .|;|. : : : /i: : : : : : : : :l
385デフォルトの名無しさん:2006/06/19(月) 01:02:35
>>380
マァマァ

ここって"if (0 == fp)"とかで盛り上がるスレですから。
386デフォルトの名無しさん:2006/06/19(月) 01:06:56
>>380
>可視性が悪くとも速度を求めるとこならコードを圧縮するし、
icc使い倒してみてから同じ台詞を言ってくれ。
最早、生半可の知識で人間が工夫しても、コンパイラに勝てない時代なのかもしれないよ。
387デフォルトの名無しさん:2006/06/19(月) 01:10:01
世の中はインテル以外のCPUがあるんだよ
388デフォルトの名無しさん:2006/06/19(月) 19:31:48
PC向けというか、x86以外だと全然アプローチが違う。
389デフォルトの名無しさん:2006/06/19(月) 20:04:20
速度を求めるなら、処理手順を見直したり、アルゴリズムを見直したり、インライン展開をしたりする。
390372:2006/06/19(月) 23:23:41
>>373は俺に何を言おうとしているのかね?
全般的に変な奴がこのスレにいるなぁと思う次第。

>>380-
小手先の技術でほんの少しスピードが速くなったからと言って、
それはコンピュータの速度向上の所為であっという間に見えなくなってしまう。
だからこそ、現在のプログラミングは見通しのよい、
誰にでも分かるものが要求されている。

速度向上で大事なのは>>389のような
>処理手順を見直したり、アルゴリズムを見直したり
という大局観。

プログラマなんだから計算量理論くらい習っているんでしょ?
小手先で何かやったからってそれが意味がないことにそろそろ気づくべき。
化石プログラマと呼ばれちゃいます。
391デフォルトの名無しさん:2006/06/19(月) 23:31:27
>>380の言ってることは>>389のようなアルゴリズム面のことだと思われ。
392デフォルトの名無しさん:2006/06/19(月) 23:49:33
>>391
だがしかし、ふつー、それを「コードを圧縮する」とは表現せんわな。
393390:2006/06/19(月) 23:49:49
>>391
それならいいんだけど、文面からはとてもそう読めない(w
コードを圧縮って言われてもなぁ。

「標準ライブラリで用意されているような物を長々と書くな!ライブラリを使え!」
の意味なら分からなくもない。

394デフォルトの名無しさん:2006/06/19(月) 23:50:49
>>379
無駄な一時変数は「問答無用で」悪
395デフォルトの名無しさん:2006/06/19(月) 23:53:38
>>394
>>351のは無駄な、じゃないだろ
396390:2006/06/19(月) 23:55:31
16秒差(w
397デフォルトの名無しさん:2006/06/19(月) 23:58:21
コードを圧縮して速くなると聞いて、すぐに思い浮かぶのが初期のBASICである俺は、立派なオヤジ
398391:2006/06/20(火) 00:00:20
他人の表現なんだから多少違和感があって当然だし。
ある程度は好意的に受け取ってもいいんじゃまいか?と思った。
まぁここは2chだし、そうもいかないんだろうけど。
399デフォルトの名無しさん:2006/06/20(火) 00:03:34
だがしかし、ふつー、それを「コードを圧縮する」とは表現せんわな。
400デフォルトの名無しさん:2006/06/20(火) 00:14:57
>>380 は「可読性が悪くとも」と書いてるから、アルゴリズムなんかより
ある意味小手先のテクを言ってるんだと思う。
401デフォルトの名無しさん:2006/06/20(火) 00:25:55
どうでもいい事をグダグダと・・・
402デフォルトの名無しさん:2006/06/20(火) 00:45:07
>>390
昨今の計算機では速度はほとんど問題にならないのはその通り。
だからこそ、速度が必要な個所では徹底的に速度が要求されるわけで、
小手先の技術使ってでも速くする必要があるわけだが。
403デフォルトの名無しさん:2006/06/20(火) 00:56:07
ふむふむ。
つまり糞重いゲーム3重起動してる中でツール5種類使ってるとか。

そのような場面を想定した場合、6種類目のツールは少しでも速い必要があるな。
404デフォルトの名無しさん:2006/06/20(火) 01:00:42
プログラマだけど計算量理論習ってないよ…(´・ω・`)
405デフォルトの名無しさん:2006/06/20(火) 01:05:00
>>404
馬鹿?
406デフォルトの名無しさん:2006/06/20(火) 01:06:40
いやだから、昨今のコンパイラの最適化の能力向上で、小手先の最適化は却って遅くなることがあるんだってば。
きちんとプロファイルを取って分析する能力が求められる時代になってきたと思うよ。
#典型的な例
for (int iy = 0; iy < height / 2; ++iy) {
for (int ix = 0; ix < width / 2; ++ix) {
array[ix + iy * width] = array[ix * 2 + iy * 2 * width];
}
}
これを
int xEnd = width / 2;
int yEnd = height / 2;
for (int iy = 0; iy < yEnd; ++iy) {
int oy = iy * width;
for (int ix = 0; ix < xEnd; ++ix) {
int od = ix + oy;
int os = ix * 2 + oy * 2;
array[od] = array[os];
}
}
こう書いたところでコンパイラによっては同程度のコードを吐く。
407デフォルトの名無しさん:2006/06/20(火) 01:10:35
下手だなぁw
408デフォルトの名無しさん:2006/06/20(火) 01:14:18
>きちんとプロファイルを取って分析する能力が求められる時代になってきたと思うよ。
これは時代とかじゃなくて当たり前の事です
409デフォルトの名無しさん:2006/06/20(火) 01:43:26
if文と三項演算子の話から、最適化の話に持ってけるとは
素晴らしいセンスの持ち主がおるな。
410デフォルトの名無しさん:2006/06/20(火) 01:48:40
>>405
おれも習ってないよ「計算量理論」
それってプログラムに必要なの?
411デフォルトの名無しさん:2006/06/20(火) 01:53:36
難しく考えるな、O(n)の話だ。
知ってるよな?
412デフォルトの名無しさん:2006/06/20(火) 02:23:56
>>411
あぁ!それなら知ってる。ありがとw
413デフォルトの名無しさん:2006/06/20(火) 08:05:10
>>406
その手のコードならGPU使うのが定石かな。
414デフォルトの名無しさん:2006/06/20(火) 11:10:46
どの機器にもGPUが搭載されていると思っているヤツがいるスレはココですか?
415デフォルトの名無しさん:2006/06/20(火) 11:33:00
require 'open-uri'
(1 .. 100).each { |i|
begin
open("http://vista.x0.com/index.php?page=#{i}").each_line { |l|
if /(vi\d{10}.jpg)/ === l and !File.exist?($1)
open($1, 'wb') { |out|
out.write(open("http://vista.x0.to/img/#{$1}", 'rb').read)
}
end
}
ensure
end
}
416デフォルトの名無しさん:2006/06/20(火) 13:42:03
c = read();
if (c > -1) {
   append(c);
   c = read();
   while (c > -1) {
       append(FOO);
       append(c);
       c = read();
   }
}
417デフォルトの名無しさん:2006/06/20(火) 14:26:11
418デフォルトの名無しさん:2006/06/20(火) 17:28:55
ぶっちゃけ>>406はどっちがいいの?
俺ならループの外でxEndとyEndを書いてる分
下の方がいいのかなあ、と思う反面、oy,od,osってのは
わざわざ別にしなくてもいんじゃねの?とも思うんだけど。



419デフォルトの名無しさん:2006/06/20(火) 17:42:12
良いも悪いも出力されるアセンブラコード次第だろ。
ボトルネックにもなってないのに常に後者の書き方してたらアフォ。
420デフォルトの名無しさん:2006/06/20(火) 18:10:18
文句は言うけど答えが出せない人って
見てて恥ずかしいよねw
421デフォルトの名無しさん:2006/06/20(火) 18:47:58
>>418
後者のコードもinner loopに不要な式があったりしてどうかと思う。
あれを最適化してもらう目論見なら、前者で十分。

ところで画像処理とか音声処理とかやってると、ちょろちょろっと配列を操作する
コードが結構いろいろなところに出てくるので、最初のうちにアレコレ調べて初めから最適な
コード(SSEとかも使う)を書いたほうが、何も考慮しないで後でプロファイラ使うより結局は楽なことが多いよ。
ボトルネックの解消なんか繰り返してると結局全面的に書き直す羽目になったりする。
422デフォルトの名無しさん:2006/06/20(火) 18:48:53
>>421
>ボトルネックの〜なったりする。
後からボトルネックの〜なったりする。

ですた。ごめんなさい。
423デフォルトの名無しさん:2006/06/21(水) 01:41:17
>421
>最初のうちにアレコレ調べて初めから最適なコード(SSEとかも使う)を書いたほうが

それなら、アセンブラ使った方が良いと思うが…

わざわざC/C++とかで書くのは、英語が分かるのに
日本語で書いて機械語翻訳で英文作るのと同じくらい
ナンセンス。
424デフォルトの名無しさん:2006/06/21(水) 11:10:49
っインラインアセンブラ
425デフォルトの名無しさん:2006/06/21(水) 12:02:08
脱線だが:
>423
「英語が分かる」の程度によっては長文を早く書けるので便利。
ソース修正して実行させてまた修正してを繰り返すのと同じく、
日本語修正して繰り返し試行できるしね。
自分が知ってて読めるけど作文では思いつかない単語や構文も使ってくれるし。
また、対訳形式になってる翻訳ソフトだと日本語との整合性を保ったまま
英語と日本語の両方の文書が一度に書けてオトク。
426デフォルトの名無しさん:2006/06/21(水) 12:52:21
>>423
普通アセンブラとC/C++組み合わせるんじゃないの?
全部アセンブラなプロジェクトはほとんど無いだろ。
427デフォルトの名無しさん:2006/06/21(水) 18:21:13
そりゃ、適材適所だよな。
アセンブラでのコードを書くほど高速化が必要じゃない部分を、
わざわざアセンブラで書く人は趣味でやってる人ぐらいでしょ。
428デフォルトの名無しさん:2006/06/21(水) 18:39:53
>>427
だけじゃないよ。
例えばCPUのレジスタを直接制御する必要があったらアセンブラが必要になるし。
#逆に寧ろ、趣味でもないのに高速化の目的でアセンブラを使うのもおかしな話だが。
429デフォルトの名無しさん:2006/06/21(水) 18:42:13
なんの話やら
430423:2006/06/22(木) 00:52:14
>426,527
>423の何処に「全部」アセンブラでと書いてあるのかと個一時間…
そう読めてしまうのは分かるが、ツッコミ入れる前に
自分が誤解していないか、よく考えた方がいいぞ。

お前みたいなのがぱっと見でヘタだと判断して要らん修正し、
デグレを発生させるんだぞ?
431デフォルトの名無しさん:2006/06/22(木) 00:53:20
そして漏れみたいなのがtypoでバグ生むんだぞ、と…orz
432デフォルトの名無しさん:2006/06/22(木) 00:56:49
typoがコンパイルエラーではなくバグに発展するような
紛らわしい識別子命名規則でやってるのかね貴方は
433デフォルトの名無しさん:2006/06/22(木) 01:08:57
宣言不要のスクリプト言語じゃね?
代入式で変数名を間違えたりするとアウト
undefを読んでもエラーにならない処理系ならなお悲惨
434デフォルトの名無しさん:2006/06/22(木) 04:50:04
いやぁ、定数値を間違えてもコンパイルは通るだろ。
#所詮、427を527と書いただけなんだから。
435デフォルトの名無しさん:2006/06/22(木) 06:42:27
>>430
むしろ、誤解した結果
> それなら、アセンブラ使った方が良いと思うが…
というレスがなされたと思われる。
436デフォルトの名無しさん:2006/06/22(木) 11:46:58
だよなぁ。
そもそも>>421読んでアセンブラ使わないとは思わないだろ。
SSE使うとか書いてるのに。
437デフォルトの名無しさん:2006/06/25(日) 13:37:05
ネタ無くなったな
438デフォルトの名無しさん:2006/06/25(日) 22:16:48
えっとじゃあ、定数の意味づけに#defineとstatic constが混在してるソース
439デフォルトの名無しさん:2006/06/25(日) 23:11:50
enumも忘れちゃ遺憾。
440デフォルトの名無しさん:2006/06/27(火) 18:24:55
#ifdef HOGE
    if(hoge) {
#endif
     :
     :
#ifdef HOGE
    }
#endif
441デフォルトの名無しさん:2006/06/27(火) 19:07:17
なんか、急に勢いなくなったね。このスレ。

>>440
それだけだと間抜けだけど、ifdefの条件が機種依存かつ複雑化すると、結局そういうコードになりそう。
というか、オープンソースで見たことある。なんのコードだったか忘れたのが申し訳ない。
442デフォルトの名無しさん:2006/06/27(火) 22:55:04
>>440
なにに突っ込んでるのかよくわからんが、ヘッダファイルなら

#ifdef __cplusplus
extern "C" {
#endif
     :
     :

#ifdef __cplusplus
}; /* end of extern "C" */
#endif

と言うコードはよくみるけど。
443デフォルトの名無しさん:2006/06/27(火) 23:39:17
#ifdef HOGE
if(hoge)
#endif
  {
     :
     :
}

こうしろってことじゃないの?
444デフォルトの名無しさん:2006/06/28(水) 00:00:17
俺は、

if(hoge){
 ...
}

ってする派だから、>>443 のように書くぐらいなら >>440 のように書く。

if(hoge)
{
 ...
}

って書く奴なら、違和感ないのかもしれないけど…。
445デフォルトの名無しさん:2006/06/28(水) 01:28:18
>444
#ifndef HOGE
{
#else
if(hoge){
#endif
 ...
}
446デフォルトの名無しさん:2006/06/28(水) 03:22:18
>>445

わざわざ論理反転させる意味があるのでなければこっちの方が良くない?

#ifdef HOGE
  if(hoge){
#else
  {
#endif
 ...
  }

447デフォルトの名無しさん:2006/06/28(水) 07:47:13
俺も普段は
  if(hoge){
形式だけど、#ifを使うときは
#if HOGE
  if(hoge)
#endif
  {
としてる。その辺は臨機応変に。

関数の一覧を作る機能が貧弱なIDEで
>>445-446の書き方をすると、
純粋に'{'と'}'の対応が取れないと判断されて
作成に失敗したりする。某M社のIDE。
448デフォルトの名無しさん:2006/06/29(木) 17:54:55
#define Repeat(Cnt,Max)  for(int Cnt = 0; Cnt < Max; ++Cnt)

int hoge(){

こんなマクロってやっぱヘタかな。俺的に超重宝しているのだが
449デフォルトの名無しさん:2006/06/29(木) 17:57:11
#define Repeat(Cnt,Max)  for(int Cnt = 0; Cnt < (Max); ++Cnt)

↓使い方
int hoge(){
  Repeat(i, 100){
     printf("%d",i);
  }
  return 0;
}

こんなマクロってやっぱヘタかな。俺的に超重宝しているのだが
450デフォルトの名無しさん:2006/06/29(木) 17:57:13
破門
451デフォルトの名無しさん:2006/06/29(木) 17:59:08
使うたびに #define、#undef してるなら有効と思ってみる
452デフォルトの名無しさん:2006/06/29(木) 18:03:32
>>449
それがなぜ好ましくないかを実感・納得してもらうのはなかなか難しい。
コギャル語(まだあるのか?)で書かれた文章を読む方の身にもなってみろといえばわかるか。

チームで開発する時その手の俺用語がいっぱいあるといちいち定義を確認しないといけないし
余計な依存ヘッダが増えて解読が面倒なんだよ。

それにタイプ数減らすことが直接生産性に繋がるわけでもないしからメリットもほとんどない。
Repeatの挙動を一気に変える事なんてないしな。
453デフォルトの名無しさん:2006/06/29(木) 18:09:33
>>448 見て何のことかさっぱり分からんかった

>>449 で納得
454デフォルトの名無しさん:2006/06/29(木) 18:16:36
>>449
スゲーよ!それ!
俺もこれからそれ使うよ!
455デフォルトの名無しさん:2006/06/29(木) 20:49:27
>>452
納得させるのは無理だw
下手なコードだからスレ違いでは無いけれど
456デフォルトの名無しさん:2006/06/29(木) 20:51:52
>>449 は今手持ちのコードをすべて修正中です。
しばらくお待ちください。
457デフォルトの名無しさん:2006/06/29(木) 21:17:59
修正なんかしなくても、プリプロセッサ通せばすむだけでは。
458デフォルトの名無しさん:2006/06/29(木) 21:47:33
 たとえばCOMの参照カウント付オブジェクトを使うときに、
if (pObj) { pObj->Release(); pObj = 0; } なんてのを多用する。
これを SAFE_RELEASE(pObj) なんていうマクロにすることもある。

これを外挿して、

多くのループが必要で、かつカウンタや回数に長い変数名を使う
必要がある特殊なコードならRepeat なんていうマクロもありなのかもしれない・・・
459デフォルトの名無しさん:2006/06/29(木) 21:50:49

ヘタじゃないと思うけどなぁ

マクロアセンブラとかだとそういうの当たり前だから
そっちの出身者にとっては抵抗感少ないですよ
460デフォルトの名無しさん:2006/06/29(木) 22:48:08
iは宣言されていません?
461デフォルトの名無しさん:2006/06/29(木) 22:52:42
>>449は、相手が自分の世界の人間なのか、他国の人間なのかを確かめる
良い例なのかもしれない。
462デフォルトの名無しさん:2006/06/29(木) 22:54:58
昔はグローバル変数が当たり前だったから
抵抗感少ないと言っているようなものでは?
463デフォルトの名無しさん:2006/06/29(木) 23:22:59
>>461
>>1
> グローバル変数の話題は禁止。

DQN への餌やりはご遠慮ください。
464デフォルトの名無しさん:2006/06/29(木) 23:27:50
for (int i = 0; i < cnt; i++) というごく当り前の慣用句があるのに、
Repeat(i, cnt) を使いたいという理由の有無が問題なわけで。

例えば何らかの理由で 8 重ループなんてのがあちらこちらに
出てくるようなケースだと、
Repeat8(i1,i2,i3,i4,i5,.i6,i7,i8, 2, 2, 3, 2, 4, 2, 2, 2) なんてのを
define したくなるかもしれない。

でも1重ならよほどのことが無ければ別に必要ないんでは?
465デフォルトの名無しさん:2006/06/29(木) 23:42:37
> Repeat8(i1,i2,i3,i4,i5,.i6,i7,i8, 2, 2, 3, 2, 4, 2, 2, 2) なんてのを

.i6 の typo はおいとくとして、こんなマクロ組むと i3 のループ回数はどれ
だったっけ? とかがぱっと見てわからない。

Repeat8 の是非は別にして、少なくとも

Repeat8(i1, 2, i2, 2, i3, 3, i4, 4, i5, 2, i6, 2, i7, 2, i8, 2)

とした方がいい。

それとも、「ヘタだなぁ」と思うマクロ の見本?
466デフォルトの名無しさん:2006/06/29(木) 23:49:11
ヘタだなぁと思う釣り師達のレス
467デフォルトの名無しさん:2006/06/29(木) 23:52:01
449の場合重宝しちゃってるらしいからDLLでも作ったほうがいいんじゃね?
468デフォルトの名無しさん:2006/06/30(金) 00:08:01
469デフォルトの名無しさん:2006/06/30(金) 00:47:43
ぱっと見て「ヘタだなぁ」と思う嫁さんの料理

470デフォルトの名無しさん:2006/06/30(金) 11:43:06
嫁「もうお前には作ってやらん」
471デフォルトの名無しさん:2006/06/30(金) 12:41:32
ぱっと見て「ヘタだなぁ」と思う嫁さんの子供
472デフォルトの名無しさん:2006/06/30(金) 15:04:49
お前のじゃい

いや…お前のじゃないのか(;´Д`)
473デフォルトの名無しさん:2006/06/30(金) 20:19:49
ぱっと見て「ヘタだなぁ」と思うおまいらの会話
474デフォルトの名無しさん:2006/06/30(金) 20:41:07
ぱっと見て「ヘタだなぁ」と思う473の文章
475デフォルトの名無しさん:2006/06/30(金) 21:20:43
どうして#define多用がヘタな傾向になるのかは何故?
あとtypedefで独自型を勝手に作るのも駄目か?

typedef char Int8;
typedef unsigned char UInt8;
typedef short Int16;
typedef unsigned short UInt16;
typedef int Int32;
typedef unsigned UInt32;
typedef float Float32;
typedef double Float64;

俺はこの方が見やすいからこうしてる。また、俺はなんでもクラス化するのが
好きだから最終的にはCVariantとかCInt(コンストラクタで符号の有無を指定)
とかやってる。もちろんCStringも独自に開発した。とくに俺のCStringはランダム要素n
476475:2006/06/30(金) 21:26:30
↑すまそテンション上がりすぎたから支離滅裂になってしまった。また跡で出直してくる
477デフォルトの名無しさん:2006/06/30(金) 21:39:25
>>475
何のためにサイズを明記したいのかわからないが、これから64bit環境に
移行していくに当たって、サイズにかかわらないコーディングを心がける
という観点からすれば、下手。
478デフォルトの名無しさん:2006/06/30(金) 21:48:59
通信パケットのようなバイナリデータや、ハードウェア制御が絡むようなコードだと
サイズ明示したほうがいいな、きっと。
479デフォルトの名無しさん:2006/06/30(金) 21:56:04
え、通信でバイナリデータそのまま送るの?
480デフォルトの名無しさん:2006/06/30(金) 21:57:31
ヌルグラマ乙
481デフォルトの名無しさん:2006/06/30(金) 22:01:19
>>475
sys/types.hでu_charなんかがtypedefされていない処理系の話だと思うんだけど、
u_charとかu_intというtypedefじゃ駄目なの?
482デフォルトの名無しさん:2006/06/30(金) 22:01:26
>>479
ひんと: 通信 (* パケット *)
483デフォルトの名無しさん:2006/06/30(金) 22:02:14
>>480
484デフォルトの名無しさん:2006/06/30(金) 22:02:57
>>482
485デフォルトの名無しさん:2006/06/30(金) 22:17:51
ん、構造体などを直接通信で送るということか?
486デフォルトの名無しさん:2006/06/30(金) 22:32:48 BE:59907762-#
>>475
そんなの使う機会がない。
487デフォルトの名無しさん:2006/06/30(金) 22:35:35
直接バイナリでデータを送るほうが特殊だろ、と言ってみる。
488デフォルトの名無しさん:2006/06/30(金) 22:36:50
荒らしてくださいhttp://vl-o-l.jp/vinorosso/
489デフォルトの名無しさん:2006/06/30(金) 22:37:24
>>475,478ですんなり終わらないのがこのスレのレベルの低さを表してるな。
490デフォルトの名無しさん:2006/06/30(金) 22:38:21
まぁどっちかというと、直接バイナリでデータを送るほうがヌルいな。
491デフォルトの名無しさん:2006/06/30(金) 22:41:11 BE:119816238-#
>>489
それで納得するお前がヘタ。
492デフォルトの名無しさん:2006/06/30(金) 22:43:56
「通信パケット」だからバイナリデータだというのは変な話だな。
493デフォルトの名無しさん:2006/06/30(金) 22:58:56
>>487
VoIPやってるとバイナリで規定されているフォーマットというかプロトコルなんかいくらでもあるぞ。
494デフォルトの名無しさん:2006/06/30(金) 23:01:27
自分の知らないことは存在しないことだし存在しないことは糞というおめでたい思考なのだろう
495デフォルトの名無しさん:2006/06/30(金) 23:03:32
まぁどっちかというと、自分が知ってることを他人が知らないと見下す奴の方が糞だな。
496デフォルトの名無しさん:2006/06/30(金) 23:10:00
よくわからんが、ある特定の通信プロトコルで必要になる構造体を定義しなおすということか?
そういうのヘッダファイルがあるんじゃないの?
497デフォルトの名無しさん:2006/06/30(金) 23:14:17
>>496
寝言は寝て言え。ってーかお前らホントに世界が狭いのナー。
酔っぱらってるんで煽りみたいな文体になっちゃってわるいが、
VoIP 関連ははRTSP始めとしてバリバリにバイナリの世界だし
ライブラリなんぞもほとんど整備されてない。

ファイルフォーマットに関しても静止画や動画のコンテナは殆どが
バイナリで規定されている。

最近のプロトコルはそういうの嫌ってXMLとか使ってるんだろうけど。

498デフォルトの名無しさん:2006/06/30(金) 23:18:10 BE:44931233-#
>>496
通信で構造体をそのまんま送ることなんてないだろ。
499デフォルトの名無しさん:2006/06/30(金) 23:23:18
>>497
どうでもいいけどさ、君は>>475のようなtypedefを推奨するの?
はっきりいって、ヘタでしょ、あれ。
500デフォルトの名無しさん:2006/06/30(金) 23:23:49
パケットヘッダを生成するときなど、普通にビット演算する必要があるわけで。
501デフォルトの名無しさん:2006/06/30(金) 23:24:29
>>497
今も昔も、通信のメインストリームはASCIIです。
502デフォルトの名無しさん:2006/06/30(金) 23:25:20
>>499
stdintとか使え、と言うなら話は分かるが。
503デフォルトの名無しさん:2006/06/30(金) 23:26:12
>>501
そりゃ、高レベルの話だろ。ASCII(?)だろうがなんだろうが、ビット列なのに代わりはない。
504デフォルトの名無しさん:2006/06/30(金) 23:27:19
BYTEとかLONGとかにtypedefするんじゃないの?ふつー。
505デフォルトの名無しさん:2006/06/30(金) 23:27:25
>>499
typedef char int8; はヘタで、typedef signed char int8; としろ、
という話なら合意するけど。

あとさすがに float とかは使わないな。漏れも世界が狭いのかもしれないけど。
506デフォルトの名無しさん:2006/06/30(金) 23:27:57
>>504
そりゃ、Windowsだけ
507デフォルトの名無しさん:2006/06/30(金) 23:28:20
段々痛さが増してまいりました。
508デフォルトの名無しさん:2006/06/30(金) 23:29:43
>>503
いや、テキストで定義されたプロトコルも昔からかなり多いよ。
RPCまでテキストになってきてるのは最近だけど。

といってもASCIIだけでバイナリを意識しないんじゃ dns 一つ引けやしない
わけだけれどもね。
509デフォルトの名無しさん:2006/06/30(金) 23:29:45
>>505
話がずれてる。
typedef char Int8;
ほれ、これ使うの?
510デフォルトの名無しさん:2006/06/30(金) 23:30:13 BE:104838473-#
>>507
と、話に参加できない人がつぶやいております。
511デフォルトの名無しさん:2006/06/30(金) 23:31:20
なんか痛いなぁ。
もうわかったから。
512デフォルトの名無しさん:2006/06/30(金) 23:32:53
なんでVoIPなんだ?
他にもバイナリでやり取りされるプロトコルはたくさんあるだろ。
513デフォルトの名無しさん:2006/06/30(金) 23:33:22
読解力無いアホが多いようだけど、どうみても>>475は通信という文脈じゃありませんから。
514デフォルトの名無しさん:2006/06/30(金) 23:34:28
>>508
あー、ごめん。仕事柄、どっちかというと低レベルな分野を扱うことが多いので、
つい何の前提もなく、そっちのほうを主眼においていたわ。
TCP/IPなら、IP層の話をしてたつもり。
515デフォルトの名無しさん:2006/06/30(金) 23:36:38
>>513
読解力がないのはオマエ。>>475のようはtypedefはどうか、という話題であって、>>475の使い方がどうか、という話じゃないから。
516デフォルトの名無しさん:2006/06/30(金) 23:36:57 BE:244623277-#
>>513
文脈っていうか、脈絡がなくね?
517デフォルトの名無しさん:2006/06/30(金) 23:37:04
>>514
つまり、それこそがこの業界のメインストリームであり、>>475は素晴らしいと
おっしゃるのですな。
518デフォルトの名無しさん:2006/06/30(金) 23:38:10
うわー、「俺お前らより高級」っつ匂い撒き散らしてますな。
はいはい、えらいえらい。
519デフォルトの名無しさん:2006/06/30(金) 23:40:13
>>515
>>475は、最終的にはCVariantとかCIntとかを使うと書いてるだろうが。
その過程のtypedefだろ。
520デフォルトの名無しさん:2006/06/30(金) 23:40:29 BE:269584496-#
>>518
たぶん全員、お前より高級。
521デフォルトの名無しさん:2006/06/30(金) 23:42:11
>>520
お前が一番痛いなw
522デフォルトの名無しさん:2006/06/30(金) 23:42:57
>>517
別にすばらしくはないが、>>475みたいなのが必要になるケースはあるということ。
523デフォルトの名無しさん:2006/06/30(金) 23:43:32
たとえ酔っ払っていても、俺様はお前らより読解力があるぞということですね。
はいはい、えらいえらい。
524デフォルトの名無しさん:2006/06/30(金) 23:47:09
525デフォルトの名無しさん:2006/06/30(金) 23:48:31
うちでは日常的にfloat, doubleを使うから、それ使わないお前らは糞、
と同じレベルだな。
526デフォルトの名無しさん:2006/06/30(金) 23:50:13
つ stdint
527デフォルトの名無しさん:2006/06/30(金) 23:51:41
純粋な疑問なんだけど、そのVoIPのヘッダではエンディアンとかどうなってるの?
あと、
int i;

short s1;
short s2;
とかの場合、きめうちで受け取ったほうが変換したりするの?
528デフォルトの名無しさん:2006/06/30(金) 23:52:33
>純粋な疑問なんだけど、そのVoIPのヘッダではエンディアンとかどうなってるの?
バカ丸出し
529デフォルトの名無しさん:2006/06/30(金) 23:52:42
>>526
stdintじゃビット幅がわかんないから明示するという話でしょ
530デフォルトの名無しさん:2006/06/30(金) 23:53:29
>>528
まぁ知らないだけで馬鹿じゃないと自負してるけど、答えたくないってことですね。了解。
531デフォルトの名無しさん:2006/06/30(金) 23:55:19
>>528
バカ丸出し
532デフォルトの名無しさん:2006/06/30(金) 23:58:05
ぱっと見て「ヘタだなぁ」と思う人間 >>515
533デフォルトの名無しさん:2006/07/01(土) 00:16:02
知識自慢はもうしないの?
534デフォルトの名無しさん:2006/07/01(土) 00:23:13 BE:279569287-#
>>533
もうって、だれか知識自慢してた?
535デフォルトの名無しさん:2006/07/01(土) 00:32:04
ひんと: 大多数の人には常識でも、特定の人には「知識」と感じられるらしい。
536デフォルトの名無しさん:2006/07/01(土) 00:33:56
ぱっと見て「ヘタだなぁ」と思う人間 >>534
537デフォルトの名無しさん:2006/07/01(土) 00:35:55
適材適所で使えばtypedefは有効だが、多分>>475の使い方は糞、でFA。
538デフォルトの名無しさん:2006/07/01(土) 00:40:59 BE:224654459-#
この程度のスレで知識自慢されてると感じてしまうかわいそうな >>536
539デフォルトの名無しさん:2006/07/01(土) 00:42:27
>>537
> 多分>>475の使い方は糞、でFA。

で、理由は?
540デフォルトの名無しさん:2006/07/01(土) 00:43:21
>>538
>>498
バカ丸出し
541デフォルトの名無しさん:2006/07/01(土) 00:43:58
>>539
多分、適材適所じゃないから。
542デフォルトの名無しさん:2006/07/01(土) 00:46:10 BE:314515297-#
>>540
え、構造体をそのまま送るの?
543デフォルトの名無しさん:2006/07/01(土) 00:52:07
>>541
ハードウェア扱ってる奴なら普通にサイズを意識して typedef するけど、
そういうのは無視と言うことか?

あと、上のほうの議論で言えばプロトコルスタックを作ってる奴とか。

て言うか、どこに使うかもわからんのに「適材適所じゃない」とか言える
なんて、ひょっとしてエスパー君? (w
544デフォルトの名無しさん:2006/07/01(土) 00:54:39
>>543
だから適材適所ならいいって言ってるだろ。
俺は>>475は多分適材適所で使ってるとは思わないだけだ。
545デフォルトの名無しさん:2006/07/01(土) 00:56:07
上手い下手は別に自分とやってること違うってだけで文句言ってるヤツ多いな
546544:2006/07/01(土) 00:57:28
何でって聞かれそうだから先に答えておくと、>>475は、CIntやCVariantを使うそうだし、
CStringも自作したそうだから。
547544:2006/07/01(土) 01:00:26
さらに俺ならcapitalizeしたtypedefなんか絶対にせん。
これは好みだがな。
548デフォルトの名無しさん:2006/07/01(土) 01:01:57
>>542
送らないの?
549デフォルトの名無しさん:2006/07/01(土) 01:02:43 BE:29954423-#
CIntとか使ってるC++のソースってすごそう。
あんまり見たくない。
550デフォルトの名無しさん:2006/07/01(土) 01:03:46 BE:29954423-#
>>548
えー、送るのー?
知識自慢にきこえちゃうわけだ。
551デフォルトの名無しさん:2006/07/01(土) 01:04:38
>>550
送らないの?
552デフォルトの名無しさん:2006/07/01(土) 01:05:26
>>550
お前痛いよ。
黙ってろ。
553デフォルトの名無しさん:2006/07/01(土) 01:07:04 BE:59908526-#
>>551
送っちゃうわけ?
554デフォルトの名無しさん:2006/07/01(土) 01:10:55
>>553
送らないの?
555デフォルトの名無しさん:2006/07/01(土) 01:13:32
>>553-554
お前ら黙れ
556デフォルトの名無しさん:2006/07/01(土) 01:23:32
CString自作w
557デフォルトの名無しさん:2006/07/01(土) 01:24:31 BE:239630786-#
>>555
構造体をそのまま送っちゃうとか言ってる人に、教えてあげる義理もないから、
これ以上言わないよ。
558デフォルトの名無しさん:2006/07/01(土) 01:26:03
>>557
送らないの?
559デフォルトの名無しさん:2006/07/01(土) 01:26:05 BE:269584496-#
>>556
文字列型の代名詞が「CString」ってのも、味わいぶかいですな。
560デフォルトの名無しさん:2006/07/01(土) 01:28:11
MFCな人なんでしょ。
そういう奴多いよ。
561デフォルトの名無しさん:2006/07/01(土) 01:28:55
>>559
え?CStringじゃないの?
562デフォルトの名無しさん:2006/07/01(土) 01:31:02 BE:44931233-#
>>561
CStringでもいいよ。お好きなように。
563デフォルトの名無しさん:2006/07/01(土) 01:31:33
構造体そのまま送るわけないだろ。
バイト列にプロトコルに従ってデータつめて送るなんて想像も
つかない世界なのか?

エンディアンなんてプロトコル定めた時点で決めてあるはず。
もしくはネットワークバイトオーダ。

揚げ足取りにもなってねー。
564デフォルトの名無しさん:2006/07/01(土) 01:32:03
>>475-558
ぱっと見て「ヘタだなぁ」と思う週末の使い方。
おれも含めて。

565デフォルトの名無しさん:2006/07/01(土) 01:32:21 BE:224653695-#
>>563
分かってないのは一人だけだから、説明してあげることもないよ。
566デフォルトの名無しさん:2006/07/01(土) 01:34:04
ちょっと目を離したら80レスって、ぽまいら
567デフォルトの名無しさん:2006/07/01(土) 01:35:33
馬鹿ばっか
568デフォルトの名無しさん:2006/07/01(土) 01:38:31
適材適所で使えばtypedefは有効だが、多分>>475の使い方は糞、でFA。
569デフォルトの名無しさん:2006/07/01(土) 01:43:10
仮にtypedefするにしても、>>475のようにはしないな。
Windowsの人はあれが普通なのか?
570デフォルトの名無しさん:2006/07/01(土) 01:45:36
つか、サイズなんて1か2か4か8しかないのに、通信屋さんはサイズもつけた
typedefするのがデフォなのか?
571デフォルトの名無しさん:2006/07/01(土) 01:52:04
>>544
> 俺は>>475は多分適材適所で使ってるとは思わないだけだ。

どこで使うかなんてどこにも書いてないと思うけど、俺には見えないものが見えてるの?

それとも、主観で嫌いと言うことで FA ?

>>570
この変数のサイズは、絶対 2 でないと困るって言う時に君ならどうする?

572デフォルトの名無しさん:2006/07/01(土) 01:54:06
>>571
しつこいな。
CVariantやCIntを使い、CStringを使うような奴が適材適所で使ってるとは思えんと
言ってるわけだが。
573デフォルトの名無しさん:2006/07/01(土) 01:55:24
>>571
ushort
574デフォルトの名無しさん:2006/07/01(土) 01:59:28
ゲームだと
typedef unsigned char u8
typedef signed char s8
typedef float f32
とかは結構やってる(Quake、HL、Irrlicht等)。
ただいくらなんでも>>475のは汚らしい。
575デフォルトの名無しさん:2006/07/01(土) 02:00:58
>>574
それは良く見るし、俺もたまに使うよ。
576デフォルトの名無しさん:2006/07/01(土) 02:11:55
>>572
詳しく聞かれると逆切れ?

世の中、CString とか使ったアプリとそのアプリから呼ばれるドライバとかの両方を
書くプログラマもいるんだけどね。

まあ、最終的には >>545 ってことかな。
577デフォルトの名無しさん:2006/07/01(土) 02:12:51
・CVariantやらCStringといった物理構造を意識させない為のクラス
・Int8やらfloat64やらといった物理構造を意識しまくりのtypedef

この両者を、レイヤーが異なることを明示せずに
並べて書くのが良くない気がする。
578デフォルトの名無しさん:2006/07/01(土) 02:14:12
なんか、ヘタなコードとキャピタライズの好き嫌いの区別がついてない奴がいるな。
579デフォルトの名無しさん:2006/07/01(土) 02:16:12
>>576
別に切れてないが。
俺はそう思っただけの話だ。そう思わないのならそれでいい。
スレタイ読めるか?「思う」かどうかのスレだぞ。
脈絡もなく>>475のようなtypedefを使う奴はヘタだと思うぞ。
580デフォルトの名無しさん:2006/07/01(土) 02:18:00 BE:269584496-#
MFCに限定しない一般論なら、CStringじゃなくて、文字列クラスとか言ったほうがいいよ。
581デフォルトの名無しさん:2006/07/01(土) 02:26:07
MPEG4の仕事やったけど、アーキテクチャの違いを吸収するマクロでは
>>574のようなtypedefは使いまくりだったけど、データの意味を表す
typedefの方が多かったよ。
582デフォルトの名無しさん:2006/07/01(土) 02:34:09
>>579
ぱっと見て「切れかかってる」と思うレス
583570:2006/07/01(土) 02:37:42
で、どうなの?
584デフォルトの名無しさん:2006/07/01(土) 02:40:21
適材適所で使えばいいじゃん。なんで議論になってるのかわからん。
まあ俺は/usr/include/sys/types.hのスタイルを好むが>>475のようなスタイルを好む奴もいるってことでしょ。
585デフォルトの名無しさん:2006/07/01(土) 02:44:47
適材適所で使えばいいじゃんと言ってる奴に限ってどこが適所かわかっていない件
586デフォルトの名無しさん:2006/07/01(土) 02:48:41
方や世界の大舞台でドイツとアルゼンチンが一進一退の死闘を繰り広げ
方や社会の掃き溜めでアホが不毛な雑談で暇潰し。
この差は一体・・・
587デフォルトの名無しさん:2006/07/01(土) 02:48:46
ははぁ、ただ単に「わかってない奴」を叩きたいだけなんだ。
そういうのマ板でやってよ。
588デフォルトの名無しさん:2006/07/01(土) 02:53:48
>>585
ビット幅を意識すべきところなんてどこにでも転がってるじゃん。
なんでわかってないことにしたいのかなぁ?
589デフォルトの名無しさん:2006/07/01(土) 02:59:13
スタイルとか言っちゃってるからだろ。
590デフォルトの名無しさん:2006/07/01(土) 02:59:55
じゃなんて言うの?
591デフォルトの名無しさん:2006/07/01(土) 03:02:19
というか、本質的には>>475のようなtypedefが各処理系には用意されてると
思うんだけど、用意されてるのに、自前のtypedefをするのはどうかと思う。
用意されてないなら問題なし。
592デフォルトの名無しさん:2006/07/01(土) 03:06:06
↑バカ丸出し
593デフォルトの名無しさん:2006/07/01(土) 03:07:09
多分痛いのはひとりだけ。
いつもの奴。
594デフォルトの名無しさん:2006/07/01(土) 03:11:03
空気を読まずに別の話。

大体において文字列クラスを自作する奴は、余計な型変換をサポートしてしまうために、
それを使うコードはなんだかわけわかめ状態になりやすい。
また、そのクラスを使う奴は、いちいち標準ライブラリの使い方と同じか異なるかを
確かめないといけないのでウザい。
595デフォルトの名無しさん:2006/07/01(土) 03:12:40
STL禁止なプロジェクトに入ってしまうと(もちろん他のライブラリも使用禁止)、
ウザいことこの上ない。富○通とか。
596デフォルトの名無しさん:2006/07/01(土) 03:23:09
>>591
用意されてても、処理系毎に異なるので結局自前で typedef する時もある。

まあ、さすがに typedef の元は処理系で用意している奴にするけど。
597デフォルトの名無しさん:2006/07/01(土) 03:51:07
関数の引数に変な値を入れてほしくないので、
typedef enumで型を作りまくったことはある。
でも、使っていたコンパイラでははじいてくれなくて、
あまり意味がなかった。
598デフォルトの名無しさん:2006/07/01(土) 04:09:34
>>570
構造体つかうよ。
599デフォルトの名無しさん:2006/07/01(土) 05:43:15
>>475-598
m9(^Д^)プギャー!!
600デフォルトの名無しさん:2006/07/01(土) 05:43:59
>>597
それはヘタ
601デフォルトの名無しさん:2006/07/01(土) 06:30:13
>>595
富士通にいたことあるけど、STL使ってたよ。
vector、list、stringだけだったけど。
602デフォルトの名無しさん:2006/07/01(土) 07:13:48
>>600
それは下手というより>>597がそういう経験をしてその間違いをしないように成長したということを褒めてあげようや
未だにやってんならm9(^д^)
603デフォルトの名無しさん:2006/07/01(土) 11:19:45
みんな夜寝ないの?
ヘタな時間の使い方だ。
604デフォルトの名無しさん:2006/07/01(土) 11:47:39
Cの enum は、a = 1, b = 2, ... の略記法みたいなもんだからなぁ。

Pascal からの転属組の俺には、>>597 の考え方はよく理解できる。
605デフォルトの名無しさん:2006/07/01(土) 13:48:22
>>601
部署やプロジェクトによって違う。
某大規模プロジェクトはSTL完全禁止。
606デフォルトの名無しさん:2006/07/01(土) 13:59:48
STL禁止の理由は何?
607デフォルトの名無しさん:2006/07/01(土) 14:05:16
>>606
さぁ?
STLはbuggyだから禁止だという噂はあった。
608デフォルトの名無しさん:2006/07/01(土) 14:15:36
「使用言語はC++だが、コードサイズが膨らむからテンプレートは使用禁止な。
同様の理由によりvirtualとRTTIも勿論禁止。
あと、値渡しと区別しにくいから参照禁止。ポインタで渡してね」
609デフォルトの名無しさん:2006/07/01(土) 14:27:43
「使用言語はC++だが、性能出ないからexception禁止」

うーん、書いてみて、これはこれでありそうだ。
610デフォルトの名無しさん:2006/07/01(土) 14:57:21
>>607
VC6のSPいくつかまでの話だよな。たしか・・・。
611デフォルトの名無しさん:2006/07/01(土) 15:00:15
>>608
コードサイズが膨らむからってより、
複雑になるからって理由で禁止にしたいな。
特にテンプレートとRTTIに関しては、テンプレートは用意されてるもん(=デバッグ済み)を使う分にはいいけどね。
無駄に複雑でなにより適切というより悪用のほうが多い。
612デフォルトの名無しさん:2006/07/01(土) 15:02:42
Boostは「デバッグ済み」と考えるべきか否か
613デフォルトの名無しさん:2006/07/01(土) 15:05:32
>>612
「標準」じゃないって部分で多くのプロジェクトで使用禁止だろうな。
614デフォルトの名無しさん:2006/07/01(土) 15:27:34
C++はめんどくさいんだね。
Javaで非標準を禁止していたら仕事にならないよ。
PerlでCPAN禁止とか、PHPでPEAR禁止とか。
615デフォルトの名無しさん:2006/07/01(土) 15:56:07
c++でSTLとtemplateを禁止にしたら魅力が半減どころではないね。
classを自前で作るリスクに比べればコードサイズなんて・・・・
616デフォルトの名無しさん:2006/07/01(土) 16:00:45
>>614
java自体がダレダレで超いい加減だからなw
マジで動作あやしいことこの上ない。
617デフォルトの名無しさん:2006/07/01(土) 16:02:04
>>615
STLを使う分にはいいと思うけど、テンプレートは何かいいことあるか?
なんかテスト項目増えるだけじゃね?
618デフォルトの名無しさん:2006/07/01(土) 16:58:06
煽り禁止
619デフォルトの名無しさん:2006/07/01(土) 17:00:46
もうスレ自体終わってるからどうでもいい。
各々の技術レベル知識レベルで勝手にヘタだなぁと「思う」だけのスレに何の意味もない。
620デフォルトの名無しさん:2006/07/01(土) 17:05:27
>>619
何でこのスレ読んで書き込んでんの?
621デフォルトの名無しさん:2006/07/01(土) 17:20:45
>>609
性能に影響出るほどexception使っちゃ駄目だろ。
622デフォルトの名無しさん:2006/07/01(土) 17:28:23
>>620
自分より技術レベルや知識レベルが下の奴を探し出して煽るため。
623デフォルトの名無しさん:2006/07/01(土) 17:29:23
じゃあ技術レベルや知識レベルと関係ない観点から。
ほとんど使い捨てに近いプログラムを
エラー処理とかきっちり馬鹿丁寧に作るのは下手なコードだと思う。
624デフォルトの名無しさん:2006/07/01(土) 17:33:28
近年まれにみるつまらんtopicだな
625デフォルトの名無しさん:2006/07/01(土) 17:35:38
Cマガジンのバッドノウハウ集の批判とか、Code Completeへの批判とかはどうよ?
626デフォルトの名無しさん:2006/07/01(土) 17:40:45
>>623
ほとんど使い捨てのつもりのプログラムが以外に使い続けられてしまう件について
627デフォルトの名無しさん:2006/07/01(土) 17:45:47
>>626
以外に使いつづけられてしまったときに堅く作り直せばいいんじゃないの?
XP的には。
628デフォルトの名無しさん:2006/07/01(土) 17:48:10
つっこみ禁止
629デフォルトの名無しさん:2006/07/01(土) 18:34:12
自分が使う場合には、不要なエラー処理は書かない。
他人が使う場合には、使い捨てとわかっていてもエラー処理を書く。
630デフォルトの名無しさん:2006/07/03(月) 00:50:03
昨日までやってたオセアニア選手権
シングルス=2位
ダブルス=優勝
ミックスダブルス=優勝
団体戦=優勝

ミャオミャオタソ頑張ったけど、シングル2位だとワールドカップのオセアニア代表は無理か・・・
631デフォルトの名無しさん:2006/07/03(月) 10:59:56
Vim3とwebalizerのソースは見ると脂汗が出る。
632デフォルトの名無しさん:2006/07/03(月) 21:42:39
>>623
多分 使い捨て ≡ なんかをちょっとテストするためのプログラムとか、
ちょっとしたデータ変換のためのスクリプトとかを意識してるんだろう
けど、世の中には銀行とかのデータ移行用のプログラムみたいに一回
しか使わないのにきちんと作る必要があるものもあるよ。

もう少しきちんと考えて書かないと、知識レベルが低く見られるよ。
633デフォルトの名無しさん:2006/07/03(月) 21:55:24
だが、時として尻尾が2本ある犬が生まれることもある
634デフォルトの名無しさん:2006/07/03(月) 22:07:33
何とかして難癖つけないと気が済まないゴミスレ。
635デフォルトの名無しさん:2006/07/03(月) 22:35:00
>>632
妄想 or 下っ端乙。
それ何回も使うよ。
636デフォルトの名無しさん:2006/07/03(月) 22:59:07
はぁ?

それってどれよ?

お前のプロジェクトは知らんけど、銀行の合併で一回こっきり
しか使わない移行プログラムなんていくらでもあるぞ。
637デフォルトの名無しさん:2006/07/03(月) 23:19:03
スレタイ関係なく、罵り合えれば何でもいいゴミ人間。
638デフォルトの名無しさん:2006/07/03(月) 23:23:34
ぱっと見て「ヘタだなぁ」と思う人生>>636
639デフォルトの名無しさん:2006/07/03(月) 23:25:17
>>636
下っ端に確定。
君の知らないところで使われてるから。
640デフォルトの名無しさん:2006/07/03(月) 23:26:47
クソスレ
641デフォルトの名無しさん:2006/07/03(月) 23:27:42
「知識レベル」なんて単語をつかう奴に、ろくな奴がいないという良い見本。
642デフォルトの名無しさん:2006/07/03(月) 23:38:25
まぁ本番環境でデータの移行を一回しか行わない銀行合併のプロジェクトもあるかも
しれんが、たとえそうであっても、普通それを使い捨てのプログラムとは言わんわな。
でもフツーはそんなデータの移行はしないがな。
643デフォルトの名無しさん:2006/07/03(月) 23:42:05
なんつー不正確でピントはずれで感覚的な議論なんだ。
もうアホかとバカかと。
644デフォルトの名無しさん:2006/07/03(月) 23:45:33
小規模DBがらみのプロジェクトとごっちゃになってるんじゃないの?
別にどうでもいいけど。
645デフォルトの名無しさん:2006/07/03(月) 23:47:29
嵐の予感・・・
646デフォルトの名無しさん:2006/07/04(火) 00:01:23
嵐というかウンコが降ってきてるというか
647デフォルトの名無しさん:2006/07/04(火) 00:04:37
>>639
kwsk
648デフォルトの名無しさん:2006/07/04(火) 02:20:50
1度しか使わないとおもって適当に書いても、
「実績」ができてしまうと何度も使われる。
逆に何度も使うと思って丁寧に書くと、完成した頃には
ニーズが失われて結局使われない。

  _、_
( ,_ノ` )y-~ 世の中そんなもんさ。
649デフォルトの名無しさん:2006/07/04(火) 02:34:32
要するに他人様のコードをヘタだのなんだの言うなら
まずは他人の書いたコードを40万行読んでその上自分で20万行書け。
話はそれからだ。
650デフォルトの名無しさん:2006/07/04(火) 03:01:20
通分して
読む:2行
書く;1行
にまからないでしょうか?
651デフォルトの名無しさん:2006/07/04(火) 05:41:39
>>649
ほほう、そこまでいかないと
if (0 == p) { ... }
について語る資格が無いということですな。
652デフォルトの名無しさん:2006/07/04(火) 06:02:39
>>650
ワロタwww
上手いwww
座布団やりたいwww
653デフォルトの名無しさん:2006/07/04(火) 06:05:00
>>651
Exactly
654デフォルトの名無しさん:2006/07/04(火) 06:22:00
何万、何十万行書いても、下手なやつはいつまでたっても下手だけどな。
655デフォルトの名無しさん:2006/07/04(火) 07:05:38
下手なやつはそれでキャリアを積んだと勘違いして困ったり
656デフォルトの名無しさん:2006/07/04(火) 08:25:55
自分は下手ではないと勘違いしていたり
657デフォルトの名無しさん:2006/07/04(火) 09:46:13
>650
うまい!
が,それは「約分」だ
658デフォルトの名無しさん:2006/07/04(火) 09:48:02
>>657
おまい、頭いいな
659デフォルトの名無しさん:2006/07/04(火) 12:35:00
>>648
一度しか使わない前提で作ったのなら作りが雑でもかまわないと思うけどね。
そんなコードを使いつづけてるほうが悪いわけで。
660デフォルトの名無しさん:2006/07/04(火) 16:31:07
問題は「一度しかつかわない」前提で書かれたコードを、十分なチェックもなく
使い回してしまう運用やら別プロジェクトにあるんじゃないか?

「そんな前提聞いてません」と言われたら困ってしまうが。
661デフォルトの名無しさん:2006/07/04(火) 16:33:21
スレ違い
662デフォルトの名無しさん:2006/07/04(火) 17:22:13
ユーザはアホと鬼の上司に言ってみたい今日この頃
663デフォルトの名無しさん:2006/07/04(火) 18:51:52
「スレが伸びてるときは、大抵は池沼が書き込んでるらしい。」
664デフォルトの名無しさん:2006/07/05(水) 01:21:06
>625
わりと納得できることしか書いてなかった。
命名について章を割いてたのは
ありそうでなかったことなので評価出来るのでは?

Writing Solid Code で冒頭からハンガリアンマンセーしてたのには辟易したが。
(言語・環境問わずに無条件でマンセーしてた。)
やっぱ立ち読みして買うべきだな、書籍は。
665デフォルトの名無しさん:2006/07/05(水) 01:41:48
>659
上司は逆に、動いていれば作りが雑でも構わないと思うだろうね。

そもそも運用が始まったら、実装担当は指示の無い限り
コードに干渉しないのが常識なんだから、手出し出来る内に
最大限の努力を払っておくべきだと思うが。

実装と運用がごっちゃのカオス状態が常識だと言うんなら
汚いコード書こうが別に構わんが。
666デフォルトの名無しさん:2006/07/05(水) 01:50:38
また知将降臨か・・・
667デフォルトの名無しさん:2006/07/05(水) 02:11:40
脳内社会人乙。
668デフォルトの名無しさん:2006/07/06(木) 01:11:38
>666,667
現実では無理だからといって理想を拒否するなよ。
できませんで終わるな。
これならできるという道を模索せよ。
669デフォルトの名無しさん:2006/07/06(木) 01:17:49
>>668
意味不明
670デフォルトの名無しさん:2006/07/06(木) 08:26:05
もっと簡単に説明してくれとよw
671デフォルトの名無しさん:2006/07/06(木) 08:28:55
一言で言うとスレ違い
672デフォルトの名無しさん:2006/07/06(木) 09:20:42
他人のコードをどうこう言う前に自分のコードのへたさに気づけよ
673デフォルトの名無しさん:2006/07/06(木) 09:31:54
自分を棚に上げるのイクナイ
674デフォルトの名無しさん:2006/07/07(金) 02:20:57

 1    1    △
 ― − ― = ―
 3    □    ○

を満たす、0でない数字 □ △ ○ を挙げてください

重複はしません。約分して下さい。

675デフォルトの名無しさん:2006/07/07(金) 06:36:21
>>674
2桁有りなら、□が4以上の数全部じゃね?
1桁だけなら、□が4以上の数で○が整数1桁で、且つ、□と被らない数探せばいいんじゃね?
676デフォルトの名無しさん:2006/07/07(金) 07:46:28
>>674
1桁だけなら
□=2
○=6
△=-1
677デフォルトの名無しさん:2006/07/07(金) 08:34:14
ぱっと見てスレタイの読めない文盲だなぁと思うレス
678デフォルトの名無しさん:2006/07/07(金) 15:48:49
char cmojiretu[50] = "AAABCCCCCCCCDDDEFGHHHHJJJ";
char cmojiretu2[50];
int isoeji = 0;
int icnt = 0;
int out = 0;
char ccnt;
printf("\n圧縮前文字列→%s\n", cmojiretu); //圧縮前文字列の表示
printf("圧縮前文字数→%d\n", strlen(cmojiretu)); //圧縮前文字数の表示
do {
if(ccnt == cmojiretu[isoeji])
icnt++; //icntを1つずつずらす
else{
for(; icnt > 9; icnt -= 9)
out += sprintf(cmojiretu2 + out, "@9%c", ccnt);
if(icnt <= 3)
while(icnt--) cmojiretu2[out++] = ccnt;
else
out += sprintf(cmojiretu2 + out, "@%c%d", ccnt, icnt);
icnt = 1;
ccnt = cmojiretu[isoeji];
}
}while(cmojiretu[isoeji++]);
cmojiretu2[out++] = '\0';
printf("\n圧縮後文字列→%s\n", cmojiretu2); //圧縮後文字列の表示
printf("圧縮後文字数→%d\n", strlen(cmojiretu2)); //圧縮後文字数の表示
return 0; //main関数を終了させる
}
このC言語のコメントがわかりません、わかる方コメントをお願いします
679デフォルトの名無しさん:2006/07/07(金) 16:27:07
>>678
私にはあなたの質問の意味がわかりません。
680デフォルトの名無しさん:2006/07/07(金) 17:10:25
分かるけどノーコメント
681デフォルトの名無しさん:2006/07/07(金) 17:12:30

ぱっと見て「コメントの付け方がヘタだなぁ」と思うコード
682デフォルトの名無しさん:2006/07/07(金) 17:27:29
コメントよりプログラム自体がヘタだろ
683デフォルトの名無しさん:2006/07/07(金) 17:36:40
>>678
ヘタの見本のようなコードだな。
どこから持ってきたコードだ?
684デフォルトの名無しさん:2006/07/07(金) 19:03:35
>>679
質問じゃなくて皮肉じゃないの?
確かに書かれているコード通りの
コメントを書く意味がわからないよw

コメントの基本は何をしてるかじゃなくて
何をしたいかだからね…
685デフォルトの名無しさん:2006/07/07(金) 19:08:09
コメントより変数の命名法の方が気になる
686デフォルトの名無しさん:2006/07/07(金) 19:09:00
ccntが代入される前に使用されています。
687デフォルトの名無しさん:2006/07/07(金) 19:25:52
これはひどい
688デフォルトの名無しさん:2006/07/07(金) 19:33:27
悪いコードの見本として、わざとヘタに書いたコードじゃないのか?
ヘタすぎる。
689デフォルトの名無しさん:2006/07/07(金) 20:00:56
>>678
char cmojiretu[50] = "AAABCCCCCCCCDDDEFGHHHHJJJ";
char cmojiretu2[50];
int isoeji = 0;
int icnt = 0;
int out = 0; // ←これだけ統一されてないのはヘタだと思う。命名法の是非は別としても。
char ccnt;
690デフォルトの名無しさん:2006/07/07(金) 20:24:38
初心者の頃はそんなコード書いてたな
691デフォルトの名無しさん:2006/07/07(金) 20:31:14
このスレは、自称初心者脱出レベルから自称上級者が確信を持って
良いコードだと思って書く下手なコードについてあれこれ言うものだから、
単に稚拙なだけのコードはスレ違いだと思う。

ちなみに
>このC言語のコメントがわかりません、わかる方コメントをお願いします
の意味は、「なんらかの理由でこのコードにコメントをつける必要が
あるのだが、どうコメントを付けていいかわからに。そこでわかる人は
コメントを付けてください」じゃないか?これもスレ違いだが。
692デフォルトの名無しさん:2006/07/07(金) 22:18:46
if(flag || num[j]) {
 printf("%1d",num[j]);
 flag=1;
}

出所は言わないでおくw
693デフォルトの名無しさん:2006/07/07(金) 23:35:08
あのーおまいら、もう終わった話だけどあれだ。
SymbianOS上での開発だけど
TInt16 とか普通に使う。
そういうコーディング規約だし、アーキテクチャ的にも
T〜 とか R〜 とか C〜 とかいうプレフィクスは大事。

伽藍とバザールの、まさに「伽藍」の美しさ。
694デフォルトの名無しさん:2006/07/08(土) 01:37:09
>>693
プリフィックスがなんの役に立つの?
695デフォルトの名無しさん:2006/07/08(土) 03:42:39
>>678
ハンガリー記法を侮辱すんな
696デフォルトの名無しさん:2006/07/08(土) 04:12:57
変数にマウスポインタ当てたら
型やらコメントやら表示する素敵IDEがあるなら
ハンガリー記法は邪魔なだけだと感じる。
697デフォルトの名無しさん:2006/07/08(土) 11:50:20 BE:159754548-#
>>696
IDEにそんな機能なくても、いらないよ。
698デフォルトの名無しさん:2006/07/08(土) 12:08:58
ハンガリアン論争はしかるべき場所でやりたまえよ
699デフォルトの名無しさん:2006/07/08(土) 12:32:13
俺はハンガリアン(型?)よりも
グローバルかメンバかローカルかスタティックか引数か?
引数なら入力か?出力か?がわかったほうが便利だと思う。

なので

gUnko
mUnko
unko
sUnko
inUnko
outUnko

にしてる。
700デフォルトの名無しさん:2006/07/08(土) 12:45:29
>>689
俺なら

char chMojiretu[50];
cahar chMojiretu2[50];
int iSoeji;
int iCnt;
int iOut;
char chCnt;

/* 初期化 */
lstrcat(&chMojiretu[0], "AABC・・・・・");
memset(&chMojiretu2[0], 0x00, sizeof(chMojiretu2));
iSoeji = 0;
iCnt = 0;
iOut = 0;
chCnt = '\0';

こう書くな。
好みの問題だけど宣言と同時に初期化は俺にとって見にくい。
701デフォルトの名無しさん:2006/07/08(土) 12:46:07 BE:269585069-#
>>698
この場所でぴったりじゃん。
702デフォルトの名無しさん:2006/07/08(土) 12:47:25 BE:69893227-#
>>700
Cならしかたないけど、C++なら宣言と同時に初期化があたりまえ。
703700:2006/07/08(土) 12:49:10
>>702
あー、俺基本的にベタCだからなー。
その影響か少なからず宣言同時に初期化は抵抗があるのかもしれない
704デフォルトの名無しさん:2006/07/08(土) 12:51:59
なんでCだと宣言と同時に初期化しないのかがよくわからない。
705デフォルトの名無しさん:2006/07/08(土) 12:52:06
>>703
それって、C++ほとんどやってませんってことだよね。
あるいは、C++の機能をほとんど使わないコードしか書いてないとか。
706デフォルトの名無しさん:2006/07/08(土) 12:57:46
むしろ初期化と宣言を同時に行わないコードは下手に見える。

>>704
C89だと変数の宣言はブロックの最初だけと決まっているからと思う。
だから自然と宣言と初期化を分離する悪しきスタイルが主流になってしまう。
707デフォルトの名無しさん:2006/07/08(土) 13:00:30
>>702
Cでも極力初期化し給え。
708デフォルトの名無しさん:2006/07/08(土) 13:01:15
まだそんなのにこだわってる人がいるんだ。
変数宣言なんてどこにも書けるし、for (int i = 0 ; ... ; ...) みたいな
書き方も普通にできるのにね。
709デフォルトの名無しさん:2006/07/08(土) 13:02:08
つーか寧ろ、ブロックの先頭で宣言できることを知らない香具師が多いんだがな。
頼むから2000行もある関数(それ自体阿呆だが)の先頭で100行もの変数リストを作らんで欲しい。
#だからと言って、FILE * fpを無理やりキャストしてフラグに使うのはもっと困り者なんだが。
710デフォルトの名無しさん:2006/07/08(土) 13:04:20
どこで読んだ話であったか、オリジナルのハンガリアンは
もっとアプリケーションロジック寄りの意味を持つプレフィクス
(x座標を表す変数だからx〜、等)だったが、その考案者が論文に
「これは変数の"type"を表す」と書いたのが誤解されて、
ほとんど意味のない型名プレフィクスをダラダラ付ける
現在の悪名高いハンガリアンが生まれてしまったという話。
711デフォルトの名無しさん:2006/07/08(土) 13:09:03 BE:59908526-#
>>707
当然初期化はするけど、宣言と同時にはしない。
使う直前で、初期化する。
712デフォルトの名無しさん:2006/07/08(土) 13:12:14
使う直前で宣言と初期化をすればよいのでは。
当面使いもしないのにブロックの先頭にだらだらと宣言が並ぶのは下手に見える。
713デフォルトの名無しさん:2006/07/08(土) 13:14:33 BE:39939124-#
>>712
いや、C89の話。
714700:2006/07/08(土) 13:16:33
>>705
その通りだねー。C++とJavaはかじったぐらいなんだけど
結局俺個人としてCが一番しっくりくるんだよ。

仕事でツール作るときも全部Cなんだけど
MFC使えないから普通に全部コード書くはめになって・・・orz
715デフォルトの名無しさん:2006/07/08(土) 13:16:38
declarationとdefinitionというネタをふってみたりみなかったり。
716デフォルトの名無しさん:2006/07/08(土) 13:16:46
いまどきC89を使ってるのは下手に見える。
717デフォルトの名無しさん:2006/07/08(土) 13:22:51
そもそもブロックがだらだらと長いのは下手に見える。
718デフォルトの名無しさん:2006/07/08(土) 13:28:55
>好みの問題だけど宣言と同時に初期化は俺にとって見にくい。

という理由で>>689のコードを>>700みたいに書き換えるのは下手にみえる。

719700:2006/07/08(土) 13:33:47
>>718
そうなのか。
いや、まあ俺も自分のコード見てPCを窓から投げ捨てたい
衝動に駆られることよくあるから。
お世辞にもうまいとはいえないと思う。

具体的にどういう初期化の指定がスマートかな
720デフォルトの名無しさん:2006/07/08(土) 13:33:54 BE:174731257-#
あと文字列の初期化にmemset()で、全部0入れてるのも素人くさいな。
(やってるやつにかぎって、それが安全だって固く信じてるけど)
721700:2006/07/08(土) 13:40:22
>>720
memset()での不思議なことがあったんだが

WCHAR test[MAX_PATH];
memset(&test[0], 0x00, MAX_PATH);
にして初期化すると。
添え字の129までが0に初期化されてて
それ以降は初期化されてないっていう現象があったんだが何で何だ
sizeof()での値取得だとちゃんと260まで初期化されてたんだが。

722デフォルトの名無しさん:2006/07/08(土) 13:46:08
>>721
一度sizeofの値を出力させてみたら?
723デフォルトの名無しさん:2006/07/08(土) 13:48:57
sizeof(WCHAR)
724デフォルトの名無しさん:2006/07/08(土) 13:49:57
>>719
変数のスコープが必要以上に広がらないようにするのがいいのでは。
基本的に変数は使う直前で定義(宣言+初期化)する。
あとは使う部分をブロックで囲むとか。
725デフォルトの名無しさん:2006/07/08(土) 13:52:08
あと、変数宣言がブロックの先頭部分にしか書けないとか、for文で変数宣言
ができないような古いコンパイラは捨てるのも重要。
726700:2006/07/08(土) 13:57:48
#include <windows.h>

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow)
{
CHAR MsgBuffer[256];

memset(&MsgBuffer[0], 0x00, sizeof(MsgBuffer));
wsprintf(&MsgBuffer[0], "%d", sizeof(MAX_PATH));
MessageBox(NULL, &MsgBuffer[0], "SIZEOF", MB_OK);
memset(&MsgBuffer[0], 0x00, sizeof(MsgBuffer));
wsprintf(&MsgBuffer[0], "%d", MAX_PATH);
MessageBox(NULL, &MsgBuffer[0], "MAX_PATH", MB_OK);

return 0;
}
でやったら4と260だった
ますますわからねー('A`)
727700:2006/07/08(土) 14:01:18
>>723
確かWCHARはunsigned shortだったろ
2バイトだから2が帰ってくると思うんだが
あれ・・つーかsizeofってバイトがかえってくるんだっけか!?

やべええええだとしたらおれすげー勘違い野郎かもしれない
728700:2006/07/08(土) 14:02:05
つーことはMAX_PATHって4バイトって事?
#defineってLONGだったっけ?
729デフォルトの名無しさん:2006/07/08(土) 14:15:18
落ち着けw
この場合sizeof(MAX_PATH)には意味はない
memsetすべきサイズはsizeof(WCHAR)*MAX_PATHだろ?
730700:2006/07/08(土) 14:16:00
すまん勘違い何だけど。
#include <windows.h>

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow)
{
WCHAR wBuffer[MAX_PATH];
CHAR MsgBuffer[256];
memset(&wBuffer[0], 0x00, sizeof(wBuffer));

memset(&MsgBuffer[0], 0x00, sizeof(MsgBuffer));
wsprintf(&MsgBuffer[0], "%d", MAX_PATH);
MessageBox(NULL, &MsgBuffer[0], "SIZEOF", MB_OK | MB_TOPMOST);

memset(&MsgBuffer[0], 0x00, sizeof(MsgBuffer));
wsprintf(&MsgBuffer[0], "%d", sizeof(wBuffer));
MessageBox(NULL, &MsgBuffer[0], "MAX_PATH", MB_OK | MB_TOPMOST);

return 0;
}
のsizeof(MAX_PATH)は260でsizeof(wBuffer)は520だった
ヘッダ定義だとMAX_PATHは260なんだけどなんで520になってるのかがよくわからない。
WCHARのバイト数に依存してるんだろうか・・。だとするとLONGの場合は1040って事になるわけ?
731デフォルトの名無しさん:2006/07/08(土) 14:17:31
c++どころかCも使えないもよう
732700:2006/07/08(土) 14:18:20
そういうことかwwwwwwwwwwww
あれだ配列はバイト分進むんだった。
つーか俺コンピュータの基本的な部分が根本的にダメだorz
733700:2006/07/08(土) 14:18:59
>>731
('A`)
734デフォルトの名無しさん:2006/07/08(土) 14:26:13
今まで書いたコード全部見直してくださいね。(笑顔で)
735デフォルトの名無しさん:2006/07/08(土) 14:27:11
俺は>>720ではないが>>726=>>730みたいにいちいち
memset(&MsgBuffer[0], 0x00, sizeof(MsgBuffer));
という文字列領域のクリアを繰り返すのは下手すぎると思う。

まあCをろくに使えない人間みたいだから多少安全がわに倒す
という意味ではましなのかもしれないが。
736700:2006/07/08(土) 14:33:06
>>735
言われてみれば下手かもしれない。
先輩のせいにするのはよくないんだろうけど仕事場で
バッファ再利用するならクリア処理絶対つけろって言われ続けてきて
そういう癖がついちまったんだ('A`)

まあ、下手なコードの見本としてみてくれれば俺はそれでいいw
むしろ今回のsizeof()関連は俺としては非常に勉強になって満足。
「こんな事もわからないのか?」なんて馬鹿にされるだろうけどね
737デフォルトの名無しさん:2006/07/08(土) 14:56:50
いいかげん700がウザい件について。
738デフォルトの名無しさん:2006/07/08(土) 15:19:59 BE:89861292-#
>>735
いや、安全にもなってないだろ。
739デフォルトの名無しさん:2006/07/08(土) 15:35:45
>>738
理由は?
740デフォルトの名無しさん:2006/07/08(土) 15:41:09
>>736
そういう職場なら仕方ないが、きっとしばしばデスマーチなんだろうな。
memset()の害悪の事例は散々書いたから割愛。
741デフォルトの名無しさん:2006/07/08(土) 15:45:48
memsetでバッファクリアしてるというだけで、デスマーチですか。
742デフォルトの名無しさん:2006/07/08(土) 16:29:29
memsetしていようがしていまいが、
デスマーチのない職場のが少ないんだから、
しばしばデスマーチだと推測しても、大半が当たるんだろうなと。
確率統計に詳しい俺様は理解したw

743デフォルトの名無しさん:2006/07/08(土) 16:31:07
流れ嫁。
744デフォルトの名無しさん:2006/07/08(土) 16:57:18
デスマーチは、能力不足より他の原因の場合が多いだろ
745デフォルトの名無しさん:2006/07/08(土) 17:00:22
>>741
おまじないばかりやってると、本当にトラブルが起きたときに対処できないよ。
746デフォルトの名無しさん:2006/07/08(土) 17:09:42
くだらん
747デフォルトの名無しさん:2006/07/08(土) 17:11:39
>>742
能力が低い奴は大変だな。
748デフォルトの名無しさん:2006/07/08(土) 17:27:52 BE:139784674-#
>>739
むしろ安全になるって理由を聞きたい。
749デフォルトの名無しさん:2006/07/08(土) 17:47:00
>>748
むしろ安全にならないって理由を聞きたい。
750デフォルトの名無しさん:2006/07/08(土) 17:54:02
strncpyの挙動を理解していないアホグラマが\0ターミネートし忘れても大丈夫という利点(?)と
memsetの書き間違いで更なるバッファ破壊を引き起こすデメリットで差し引き0だな。
まあ後者は任意のコードを走らせられない分まだましと言えなくもないかもしれなくもな(ry
751デフォルトの名無しさん:2006/07/08(土) 18:00:32
memsetを書き間違う可能性があるから使うなということですか。
752デフォルトの名無しさん:2006/07/08(土) 18:02:01 BE:224654459-#
>>750
> \0ターミネートし忘れても大丈夫という利点(?)と 

だな。
それも利点とは言えないよな。

全部0埋めして誰が得するんだ?
753デフォルトの名無しさん:2006/07/08(土) 18:05:06 BE:99846645-#
0埋めをしてれば、バグって、文字列の終端の0が無くなっても、
動くぜって思ってるやつは、ちょっと自分のセンスを疑ったほうがいい。
754デフォルトの名無しさん:2006/07/08(土) 18:06:34
>>753
そんなことを思っている奴を標準にされても困ります。
755デフォルトの名無しさん:2006/07/08(土) 18:10:22 BE:269584496-#
>>754
じゃ、標準の考え方を教えてください。
756デフォルトの名無しさん:2006/07/08(土) 18:12:48
>>755
0埋めをしていても、バグって、文字列の終端の0が無くなれば、
動かないぜって思ってるやつ。
757デフォルトの名無しさん:2006/07/08(土) 18:15:11
そのBe持ち、相手にしてもしょうがないよ。時間の無駄。
758デフォルトの名無しさん:2006/07/08(土) 18:17:13 BE:49923252-#
やっぱ0埋めするやつってこういう考え方なんだ。 > 「バグっても動く」
759デフォルトの名無しさん:2006/07/08(土) 18:18:26
>>751
memsetを書き忘れても動くようにするべき
760デフォルトの名無しさん:2006/07/08(土) 18:19:57
>>758
日本語が読めないようですね。
761デフォルトの名無しさん:2006/07/08(土) 18:25:40 BE:119815564-#
>>760
日本語で説明してください。0埋めする理由。
762デフォルトの名無しさん:2006/07/08(土) 18:29:03
>>761
日本語で説明してください。0埋めして安全にならない理由。
763デフォルトの名無しさん:2006/07/08(土) 18:33:28
memset使うくらいならこう書いた方がいい。
ANSIにきちんと従ってるCコンパイラなら、
安全確実に全ての要素を零で初期化できる。

 char hoge_path[MAX_PATH] = { 0 };
 struct Hoge hoge = { 0 };
764763:2006/07/08(土) 18:36:29
補足。
K&R日本語第2版だと付録A8.7(p273)辺りに詳しく書かれてます。
765デフォルトの名無しさん:2006/07/08(土) 18:37:44 BE:99846645-#
「バグっても動く」ってのが理由なんでしょ?
0埋め派は。

そうならそうだと言えばいいし、ちがうなら、そっちのほうの理由を書けばいい。
なんでそれができないんだろう?

理由が言えないから、またオウム返しなんだろうな。
766デフォルトの名無しさん:2006/07/08(土) 18:39:04
>>765
そんなこと初めから話してませんが。
あなたが安全にならないと主張するので、その理由を聞いてるだけです。
767デフォルトの名無しさん:2006/07/08(土) 18:41:36 BE:159754548-#
>>766
memset()で0で埋めるって、わざわざ余計な処理をしてるほうが
理由を説明したほうがいいよ。どうしてそれで安全になるのか。
768デフォルトの名無しさん:2006/07/08(土) 18:42:41
>>767
そんなことはどうでもいいので、あなたが安全にはならないと考える理由を聞かせてください。
769デフォルトの名無しさん:2006/07/08(土) 18:47:26
「バグっても動く」訳じゃないから0埋め反対とか言ってる奴。
>753,756,758,765,767

「バグっても動く」から0埋めするといってる奴
どこ?

とりあえず初期化されてないのは気持ち悪いから0埋めする奴
漏れ+α
770デフォルトの名無しさん:2006/07/08(土) 18:49:30
「memset()しているから大丈夫」
この台詞を何度聞いたことだろう。
そういう香具師に限ってバグを出すのだが……
771デフォルトの名無しさん:2006/07/08(土) 18:50:27
そういう香具師には>763を勧めてやって下さい。
772デフォルトの名無しさん:2006/07/08(土) 18:50:59
>>769
コンパイラによってはデバッグのためにわざわざ特定の初期値を埋めてくれるのだけど、
それを無にしてしまうことについて何か意見をどうぞ。
773デフォルトの名無しさん:2006/07/08(土) 18:51:37 BE:179722894-#
安全になる理由がなさそうだから「安全にならない」と思うわけだけど、
memset()派が、意外な視点で安全になる理由を教えてくれれば、考えを改めるかもしれない。

安全になる理由を説明してください。
774770:2006/07/08(土) 18:51:53
>>771
それだと、上のほうで書いている「再利用するなら初期化しろ」に対応できないのよね。
で、そういう香具師に限ってcalloc()を知らなかったりするし。
775デフォルトの名無しさん:2006/07/08(土) 18:51:59
確かに無意味な初期化を見ると何じゃコレと思う。ので、無駄な初期化反対。
776769:2006/07/08(土) 18:53:29
>772
その機能、初期化漏れを検知するためにあると思うのですが。
777デフォルトの名無しさん:2006/07/08(土) 18:53:47
>>773
>安全になる理由がなさそうだから「安全にならない」と思う
それならそうと最初から言ってください。
積極的な「安全にならない」理由があるのかと思いました。
778デフォルトの名無しさん:2006/07/08(土) 18:54:08 BE:74885235-#
>>772
コンパイラがデバッグ時に、変数を特定の値で埋めるとの、memset()で0埋め派とは、
理由が違うと思われ。
memset()派は、文字列だけでしょ?
779デフォルトの名無しさん:2006/07/08(土) 18:54:17
>>776
いいえ。
780771:2006/07/08(土) 18:55:07
>774
>上のほうで書いている「再利用するなら初期化しろ」に対応できないのよね。
再利用に対処できないからいいんジャマイカ。
781デフォルトの名無しさん:2006/07/08(土) 18:55:07 BE:209677267-#
>>777
memset()派の安全になる理由をだれか教えてくれませんかね。
782デフォルトの名無しさん:2006/07/08(土) 18:55:31
ポインタや浮動小数点型を考慮すると memset() や calloc() で
初期化なんてありえないはずなんだがね。 C++ まで考えるともっとありえない。
783デフォルトの名無しさん:2006/07/08(土) 18:57:21
>>777
バグってるコードを実行してもエラーが発生しない可能性が上がる
という点では危険になるとも言える。
784デフォルトの名無しさん:2006/07/08(土) 18:58:43
>>781
注意散漫なプログラマが、ヌルターミネートしていない文字列を扱うときに、
ヌルターミネートが必要な何かをするときに、エンバグするのを防げる。

memsetなんかに頼らず、正しいコードを書けというのには完全に同意する。
785763:2006/07/08(土) 19:00:00
ところでこの中に「memsetでの初期化推奨派」なんて居るのか。
漏れは初期化は推奨するが、memsetは勧めないぞ。
786デフォルトの名無しさん:2006/07/08(土) 19:00:15 BE:59907762-#
>>783
「バグっても動く」説は「だれも言ってない」と言ってるので、
それはあたらないんじゃないんですかね。

memset()する理由をだれか教えて欲しい。
787785:2006/07/08(土) 19:00:55
居たのか…orz
788デフォルトの名無しさん:2006/07/08(土) 19:01:16
>>783
例えばどのようなコードですか?
789デフォルトの名無しさん:2006/07/08(土) 19:01:44
「エンバグしなくてもいい」ではなくて、発見できないのでは
790デフォルトの名無しさん:2006/07/08(土) 19:02:46
>>789
意味が良く分かりません
791デフォルトの名無しさん:2006/07/08(土) 19:08:31
charの配列が戻る関数を使うときに、いちいちヌルターミネートした文字列なのかどうかを
気にしなくていい。
792デフォルトの名無しさん:2006/07/08(土) 19:10:31
俺、あれだ。
文字列処理の関数が最後に\0入れてくれるかどうか
曖昧に覚えててどれがどうなってるかわからないから
単純にmemsetで初期化しちゃう派。

文字列でコピーしたり、文字列のサイズ取得して直接バイト単位でコピーしたりして
その方法ごとに最後に\0付けるかどうか迷ってんのが面倒になった。
なんで、初っ端にmemsetやっておけば、ケツに\0がつくかどうかは無視れて便利。

ってやってたら、memsetで初期化するコストが馬鹿にならないぐらいの処理にブチあたって
正直、気を使ったw
793デフォルトの名無しさん:2006/07/08(土) 19:12:30
lenとかlen-1とか--lenとかlen+1とかがちりばめられないコードが書ける。
794デフォルトの名無しさん:2006/07/08(土) 19:13:39
>>791-793
お前らみんなヘタw
795デフォルトの名無しさん:2006/07/08(土) 19:13:44
>>792
そのやり方は
文字列に\0が含まれるかどうか
文字列に\0をつけるかどうか
をいちいち気にしないといけないんで面倒じゃないか?
796デフォルトの名無しさん:2006/07/08(土) 19:14:26
>>790
エンバグはバグを入れることを言うのですか。バグを見つけると勘違い。すみませぬ。

ただ、ヌルターミネートが必要な何かをするときに、入れ忘れても動く(エンバグしない)と言ってると思いますが
それは潜在的なバグという事ではないでしょうか?
797デフォルトの名無しさん:2006/07/08(土) 19:14:59
最後の\0まで含めたサイズを返してる同僚の関数も混ざってかなり大混乱だなw
このへんは・・・
798デフォルトの名無しさん:2006/07/08(土) 19:15:39
俺は配列の最後に\0を書き込む派。
799デフォルトの名無しさん:2006/07/08(土) 19:16:02
>>796
memsetしているから、入れ忘れは発生しないという論法。
800デフォルトの名無しさん:2006/07/08(土) 19:16:48
>>795
いや、初っ端にmemsetをする場合は\0は一切気にしなくてよくなるでしょ?
領域が全部0だから、ケツに\0がつこうかつくまいが関係ない。
801デフォルトの名無しさん:2006/07/08(土) 19:17:32
>>799
必ずmemsetしてくれるとは限らないのがポイント。
802デフォルトの名無しさん:2006/07/08(土) 19:18:37
ほら、あれだ。あれ。
ガベージコレクションの問題と似てるな。
803デフォルトの名無しさん:2006/07/08(土) 19:18:55
>>799
それは最初の一回だけですよね。
再利用して、次に格納する文字列が前より短ければダメですから。
1.2回目以降は短いか確認
2.毎回ヌルを入れる
の違い?
804デフォルトの名無しさん:2006/07/08(土) 19:19:14
>>801
memsetすればという話なんだが。
805デフォルトの名無しさん:2006/07/08(土) 19:21:03
>>804
そんな前提に頼るのは危険じゃないか?
806デフォルトの名無しさん:2006/07/08(土) 19:21:06
>>801
memset派はmemsetし忘れることがあるから危険という主張ですか?
807デフォルトの名無しさん:2006/07/08(土) 19:21:48
>>805
何の話をしてるんだ?
808デフォルトの名無しさん:2006/07/08(土) 19:22:39
>>806
というより、安全側に倒してくれるプログラマばかりとは限らないんで、
安全側に倒したコーディングをするべき。
809デフォルトの名無しさん:2006/07/08(土) 19:24:11
>>808
memsetしたほうが、多少安全側に倒れるという話なんだが。
810デフォルトの名無しさん:2006/07/08(土) 19:30:35 BE:119816238-#
>>809
なぜ安全になるか理由の説明がない。
811デフォルトの名無しさん:2006/07/08(土) 19:30:50
>>809
その多少安全というのは、入れ忘れても動くという事でしょうか?
812デフォルトの名無しさん:2006/07/08(土) 19:31:20
>>810
そうですね。
813デフォルトの名無しさん:2006/07/08(土) 19:31:36
ヌルを
814デフォルトの名無しさん:2006/07/08(土) 19:31:52
>>811
入れ忘れるも何も、入れる必要が無い。
815デフォルトの名無しさん:2006/07/08(土) 19:35:02
だいたい、プログラマのミスを隠蔽するようなコードが安全だとは思えない。
安全側に振りたいのなら、プログラマがミスを犯さないような仕掛けを
作るべきだろ。
816デフォルトの名無しさん:2006/07/08(土) 19:37:12
>>815
だから、どのようなコードが「ミス」の例なのか教えて欲しい。
817デフォルトの名無しさん:2006/07/08(土) 19:38:11 BE:239631168-#
これだけ煽ってもmemset()で安全になる理由が出てこないんだから、
memset()入れてるやつは、なんとなく空気で入れてるだけなんだろ?
818デフォルトの名無しさん:2006/07/08(土) 19:38:52
>>817
そうですね。
819デフォルトの名無しさん:2006/07/08(土) 19:40:32
>>817
いくつも出てるジャン。
820デフォルトの名無しさん:2006/07/08(土) 19:42:17
>>816
場合(主観)によるから例示は無理。
どんな例を挙げても「memset() すれば動くじゃん」って言うことができる。
821デフォルトの名無しさん:2006/07/08(土) 19:46:31
>>820
はて?
memsetで正しく動くコードがあったときに、「それはプログラマのミスを
隠蔽しているので悪」という主張じゃないの?
822デフォルトの名無しさん:2006/07/08(土) 19:46:49
>>816
納得できるかどうかわかんないけど、こんなのはどう?

struct S { char* p; float f; };
S s;
memset(&s, 0, sizeof(s));
assert(s.p == 0);
assert(s.f == 0);
// 以降にこれらの条件に依存したコード
823デフォルトの名無しさん:2006/07/08(土) 19:49:33
>>822
824デフォルトの名無しさん:2006/07/08(土) 19:50:31
822は大抵のマシンで動くので全然説得的ではないアホ例ですた
825デフォルトの名無しさん:2006/07/08(土) 19:51:27 BE:29954232-#
>>819
たとえばどれ?
826デフォルトの名無しさん:2006/07/08(土) 19:52:43
>>826
出てないよ。
827デフォルトの名無しさん:2006/07/08(土) 19:52:47
>>821 それはそうだが、>>820
828デフォルトの名無しさん:2006/07/08(土) 19:53:15
?を使うのはいつものキチガイ
829デフォルトの名無しさん:2006/07/08(土) 19:53:15
700から始まった議論がここまで激論になるとは思わなかった
830デフォルトの名無しさん:2006/07/08(土) 19:54:32
>>827
何をいいたのかわからない。
831デフォルトの名無しさん:2006/07/08(土) 19:54:53 BE:39939124-#
>>829
前スレでもmemset()で文字列クリアの話題で盛り上がったよ。
832デフォルトの名無しさん:2006/07/08(土) 19:55:19
文字列の場合は0を入れなくてもいい。って最初に入れてるけど・・・
つまり、文字列の場合は初期化じゃない(どうでもいいけど)
833デフォルトの名無しさん:2006/07/08(土) 19:59:02
>>830
移植性を考慮する場合 >>822 はミスだが、
動作環境が限定されている場合はミスではないと言える。

うーん。主張を緩くしたほうがいいかな。
memset() で正しく動くコードのうち、ほとんどの場合は
memset() を使わないコードで移植性、効率などを改良することができる。
834デフォルトの名無しさん:2006/07/08(土) 20:00:05
memsetで0クリアはヘタだし安全でもないって話になるからこじれる。
ヘタだけど安全になる場合もあるから、トータルで見て0クリアしとけってのも理解できなくは無い。
835デフォルトの名無しさん:2006/07/08(土) 20:01:58
>>833
>memset() で正しく動くコードのうち、ほとんどの場合は
>memset() を使わないコードで移植性、効率などを改良することができる。
いやいや、そんなこと始めっからわかってますがな。
効率悪くてもmemsetで0クリアしとけという場合の話。
836デフォルトの名無しさん:2006/07/08(土) 20:02:11
ポインタの場合はぬるぽになる
837デフォルトの名無しさん:2006/07/08(土) 20:03:56
>>835
> 効率悪くてもmemsetで0クリアしとけという場合の話。

それは間違いなく下手だな。
保守性も改良することができると付け加えよう。
838デフォルトの名無しさん:2006/07/08(土) 20:04:35
>>836 という環境がほとんどである。
839デフォルトの名無しさん:2006/07/08(土) 20:05:58
>>837
ヘタじゃないとは誰も主張してないのでは?
保守性に関しては多少異論があるがまぁその話はしないでおく、
840デフォルトの名無しさん:2006/07/08(土) 20:12:45
0クリアしとくことで「未使用状態は0とする。」
と暗黙に主張するという効果はあるのでは?
841デフォルトの名無しさん:2006/07/08(土) 20:21:34
こうしてmemset派は、今日も生き残ったのだった。
842デフォルトの名無しさん:2006/07/08(土) 20:22:38
じゃ次は、freeする派の主張をどうぞ。
843デフォルトの名無しさん:2006/07/08(土) 20:43:32
>>817
だから、>>792みたいな理由があるっていってるじゃん。
どこに目ついてんの?股間のあたり?
844デフォルトの名無しさん:2006/07/08(土) 20:50:52
Javaの場合は初期化する。Cではしない。
845デフォルトの名無しさん:2006/07/08(土) 21:03:13
C言語はそういうどーでもいいことを
考えなくちゃいけないから効率が悪い。
846デフォルトの名無しさん:2006/07/08(土) 21:05:13
セレブ言語カモン
847763:2006/07/08(土) 21:08:25
いい加減0埋め初期化の是非と、memsetの是非は分けて論議してくれよ…
848デフォルトの名無しさん:2006/07/08(土) 21:17:19
上手いプログラムは無駄がない
849デフォルトの名無しさん:2006/07/08(土) 21:27:37
組み込み等でもないのに初期化コストを嫌って
それが原因でポカミス起こすとしたら、
それは下手なプログラマー。

身の丈に合わない書き方なんてするもんじゃありません。
それこそ「ヘタだなぁ」と思われる要因となります。

勿論いつまでも「とりあえずmemset」は困りモン。
850デフォルトの名無しさん:2006/07/08(土) 21:34:41
分かった。
上手いプログラムは、効率第一なので、バグが出やすい。
下手なプログラムは、安全第一なので、バグが出にくい。
コレでどちらも納得!!



か?
851デフォルトの名無しさん:2006/07/08(土) 21:39:44 BE:89861663-#
>>834
> ヘタだけど安全になる場合もあるから、

いやいや、その安全になる場合の説明を求めてるんだけど、だれもできないんだよ。
852デフォルトの名無しさん:2006/07/08(土) 21:40:53
>>847
そう切り離した問題でもない。
文字列処理で10MBぐらいあるデカイののトークン分割処理やってて、
処理の始めに固定長の作業領域とって文字列処理があるたびに
memsetで初期化してたら遅くて使い物にならなかった。
853デフォルトの名無しさん:2006/07/08(土) 21:42:17 BE:69893227-#
>>843
>>792の理由でmemset()してるなら、お話にならないくらいダメだな。
854デフォルトの名無しさん:2006/07/08(土) 21:42:40
>>851
だから、>>792だっていってるじゃん。
馬鹿なの?
人の話を聞けよ!
お前使えない奴だな。
使った文字列処理が\0が付いてるか、付いてないか気にしなくていいでしょ?
855デフォルトの名無しさん:2006/07/08(土) 21:45:33 BE:359446098-#
>>854
そんな文字列を混在させて処理して、どっちか把握できなくなるから、
全部0クリアってこと?
そんなコード書くなよ。

ようするに「バクっても動くから」ってことか > memset()使う理由。
856デフォルトの名無しさん:2006/07/08(土) 21:49:27
>>855
いや、
「memsetでクリアされてるはずだから\0を気にする必要は無い」
は、処理仕様でいいと思ってるんだけど。
そもそも文字列処理って大変じゃん。
標準関数だけの考慮でそんな処理楽とか言って無い?
既存にあるものや同僚が組んだものまでいれると\0の付加は結構大きい問題になる。

ガベージコレクションしてるから、明示的に解放しなくていいと似てる問題だな。
857デフォルトの名無しさん:2006/07/08(土) 21:51:11
という事でfree議論スタート。

とその前に↓
858デフォルトの名無しさん:2006/07/08(土) 21:57:46
しばらく主演女優二人による大森電気店CMをお楽しみください。
・・・・・・・。
859デフォルトの名無しさん:2006/07/08(土) 21:58:23
そんな低レベル叩かなくてよくね?
文字列は文字のリストなんだぜ。
860      │ ↑ :2006/07/08(土) 21:59:01
    └─┘
    おらっしゃあぁぁ!!!
     ∩∧ ∧
     ヽ( ゚Д゚)
       \⊂\
        O-、 )〜
          ∪
861デフォルトの名無しさん:2006/07/08(土) 22:00:39
しかし工藤のナイスセーブ
862デフォルトの名無しさん:2006/07/08(土) 22:00:47
文字列を0クリアするのはデバッグの為ってやってる人が言ってたけど
863デフォルトの名無しさん:2006/07/08(土) 22:10:17
>>857
p がポインタのときいちいち if (p) free(p); とかやって
NULL チェックしてるのはヘタクソだとおもう。
864デフォルトの名無しさん:2006/07/08(土) 22:12:58
deleteもdeleteも
865デフォルトの名無しさん:2006/07/08(土) 22:15:19
>>863
freeやdeleteは内部でNULLチェックすることを
知らない人が結構いるので突っ込んであげるのが吉。
866デフォルトの名無しさん:2006/07/08(土) 22:15:23
>>859
それなんてHaskell?
867770:2006/07/08(土) 22:19:45
まぁ確かに、ファイルに落としたときにゴミがなくて安心できるかも知れんね。

で、>856のような主張をする香具師に限って、sprintf()の%*.*sの使い方を知らなかったり
sscanf()の%[a-z]を知らなかったりstrncpy()ではまったり、
挙句は一文字ずつ代入するループを書いたりするんだよね。

「memset()しているから大丈夫」なんて言う前にバグの出にくいコーディングをしましょうってことで。
868デフォルトの名無しさん:2006/07/08(土) 22:24:44
>>863
大抵の場合はどうせ自前でヌルポインタチェックしないといけないんだから、
どうでもいい。
869デフォルトの名無しさん:2006/07/08(土) 22:26:20
if( memsetで初期化 )
{
  printf( "安全になるよ" );
}
else
{
  printf( "安全にならないよ" );
}
こんな思考ルーチン持ってると下手だなぁと思う
870デフォルトの名無しさん:2006/07/08(土) 22:26:39
それをいっちゃ〜おしまいよ
871デフォルトの名無しさん:2006/07/08(土) 22:26:56
>865
関係無い話だが、freeやdeleteはチェックしてんのに、
fclose はチェックしてないのは何でだと思った。
872デフォルトの名無しさん:2006/07/08(土) 22:27:24
873デフォルトの名無しさん:2006/07/08(土) 22:32:01
>>867
じゃ、逆に聞くけど、処理速度が問題にならないときに
memsetで初期化して何か問題あるの?
874デフォルトの名無しさん:2006/07/08(土) 22:32:27
正直、Cの文字列関数群は糞すぎる
・末尾のNULL文字を付加するのかしないのか統一する
・引数の順番を統一する
・コピー先バッファの長さは必ず指定できるように

これら仕様をキッチリして別名の新ライブラリを作ってくれよと
875デフォルトの名無しさん:2006/07/08(土) 22:38:42
>>873
ループさせんな。 >>782, >>783
876デフォルトの名無しさん:2006/07/08(土) 22:41:14
>>875
そのレス意味がわからない。
具体的な説明なんもないじゃん。
>>782は普通に意味不明。日本語できるのかどうかからわけわからんし。
>>783は具体的な例を出してほしい。
877デフォルトの名無しさん:2006/07/08(土) 22:41:40
バグってるコードって何?具体例求む。
878デフォルトの名無しさん:2006/07/08(土) 22:44:23
calloc使いたいと思うようなところでmemsetするんじゃね?
879デフォルトの名無しさん:2006/07/08(土) 22:45:10
それはバグとはちがう
880デフォルトの名無しさん:2006/07/08(土) 22:48:11
>852
折角コテハン付けているんだから、>763も読んでくれ。

>763やcallocのような方法を知ってなお、
「必ず初期化」という行為まで含めて否定するなら、
コンストラクタ論争が起きるぞ。

memsetが問題なのは、あくまでmemsetだからだ。
881デフォルトの名無しさん:2006/07/08(土) 22:48:36
return(0)と書く人。
882デフォルトの名無しさん:2006/07/08(土) 22:49:50
>>880
ぱっと見て「ヘタだなぁ」と思う議論
883デフォルトの名無しさん:2006/07/08(土) 22:51:42
>>880←この人何を言ってるんですか?
884デフォルトの名無しさん:2006/07/08(土) 22:53:15
今のとこ、>>880が一番痛いね。
885デフォルトの名無しさん:2006/07/08(土) 22:53:27
>881
ANSI以前のコンパイラとの互換性は気にしないので付けません。
混同してはダメさね。
886880:2006/07/08(土) 22:57:06
漏れの言ってる事はそんなに変か?

主張:memsetで初期化するな。
論拠:正しい初期化のやり方ではないから。
887デフォルトの名無しさん:2006/07/08(土) 23:00:20
>>886
はぁ?
じゃあ、1回使った領域をもう1回初期化して使うときどうしろって言ってんだよ。
888デフォルトの名無しさん:2006/07/08(土) 23:00:28
コンストラクタなら普段ならしない初期化をする俺ガイル
889デフォルトの名無しさん:2006/07/08(土) 23:01:17
>>880
流れ嫁、馬鹿
890770:2006/07/08(土) 23:01:44
>>873
>memsetで初期化して何か問題あるの?
memset()で安心して、バギーなコードを書く香具師そのものが問題。
例えば、文字列変換関数か何かでこんなコードを書いたとする。
void funcStr(char * dest, const char * src)
{
int strLen = strlen(src);
for (int ic = 0; ic < strLen; ++ic) {
dest[ic] = funcChr(src[ic]);
}
}
書いた本人はmemset()してからこの関数を呼ぶからバグに気づかなかったりするわけだな。
これはあくまでも咄嗟に思いついた例だが、実際にはもっと複雑なコードにこういった断片が紛れ込むから
他人にはコードを見てもバグってるかどうかなかなか判らないわけだ。
#いや、本人は自身満々だから判るわけないし。
891763=880=886:2006/07/08(土) 23:02:58
途中でリターン押してしまった。

主張:memsetで初期化するな。
論拠:正しい初期化のやり方ではないから。

主張:初期化の是非とmemsetの是非を混同するな
論拠:初期化はmemsetを使わずとも>763の方法等で可能。↓
892デフォルトの名無しさん:2006/07/08(土) 23:04:15
>>890
ええー、そんな話したいの?
そんなのfuncStrの単体テストレベルの話じゃん。
893デフォルトの名無しさん:2006/07/08(土) 23:04:39
>889
memsetの是非と初期化の是非を混同している馬鹿や、
正しい初期化の方法を知らん馬鹿が居るから書いてるんジャイ。
894デフォルトの名無しさん:2006/07/08(土) 23:06:08
>>891
改行はどうしているのかと
895デフォルトの名無しさん:2006/07/08(土) 23:06:36
>>891
誰も初期化の是非なんかはなしてないよ。
0クリアの是非ならはなしてるが。
ひょっとして>>763を誰も知らないとでも思ってるのか?
896デフォルトの名無しさん:2006/07/08(土) 23:06:56
>>890
見事に的外れ、且つ、
自分が言い出したことに引っ込みが付かなくなって苦し紛れにしたレスにしか見えない。
いい加減黙っとけ。
897デフォルトの名無しさん:2006/07/08(土) 23:08:51
>895
>ひょっとして>>763を誰も知らないとでも思ってるのか?

念を押すと言う言葉を知らんのか。
スレを読み返せば明らかに怪しい奴がちらほら居るぞ。
それとも全部お前だったというのか。
898デフォルトの名無しさん:2006/07/08(土) 23:09:18
>>876
>>782 について、不動小数点数型とポインタ型について全ビット0で埋めることは
値を0で初期化することにならない。

>>783 の例については >>820
やっぱり無理だった例が >>890 以降の流れ。
899デフォルトの名無しさん:2006/07/08(土) 23:10:59
>>897
おめでとうございます。あなた様にぴったりな言葉が見つかりました。

「ひとり相撲」
900デフォルトの名無しさん:2006/07/08(土) 23:13:19
>>897
専ブラ使ってて、ツリー化機能があるなら>>763からツリー化してみろ。
誰もお前の相手してないのがわかるから。
901デフォルトの名無しさん:2006/07/08(土) 23:15:22
>900
お前が色々読み飛ばしてるのは良く分かった。
902デフォルトの名無しさん:2006/07/08(土) 23:15:39
>>898
MSですらZeroMemoryしてるのに変なこだわりあるんだねw
903デフォルトの名無しさん:2006/07/08(土) 23:16:56
>>901
誤読してる奴には言われたくないなあ
904デフォルトの名無しさん:2006/07/08(土) 23:18:25







   な  ん  で  こ  ん  な  に  伸  び  て  ん  の  ?







905デフォルトの名無しさん:2006/07/08(土) 23:19:53
>>901
まぁ好きなだけ独り言いってよ。読み飛ばすからw
906デフォルトの名無しさん:2006/07/08(土) 23:20:24
>>904
君がいなかったからw
907デフォルトの名無しさん:2006/07/08(土) 23:20:58
釣れた釣れたw今日は大漁ww
908デフォルトの名無しさん:2006/07/08(土) 23:21:31
釣れた釣れたw今日は大漁ww
909デフォルトの名無しさん:2006/07/08(土) 23:21:48
釣れた釣れたw今日は大漁ww
910デフォルトの名無しさん:2006/07/08(土) 23:22:01
釣れた釣れたw今日は大漁ww
911デフォルトの名無しさん:2006/07/08(土) 23:22:03
それで1000まで頑張る気?(笑)
912デフォルトの名無しさん:2006/07/08(土) 23:23:38
昨日は?
913901:2006/07/08(土) 23:26:51
じゃあチラシの裏。
memset以外の初期化方法を知らん疑惑のある奴は>862,873。
奴らを黙らせるには、正しい方法を教えるのが手っ取り早い。
なのに殆どの奴はパフォーマンスの問題など、的外れなレスばかり。
memsetの是非と初期化(0クリア)の是非を混同してるとしか思えん。
914デフォルトの名無しさん:2006/07/08(土) 23:27:56
なに言ってんだ、こいつは
915デフォルトの名無しさん:2006/07/08(土) 23:30:46
流れをぶったぎって。
最近宿題スレ見始めたんだけど、ありゃヘタの宝庫だね。
だが、ただヘタなだけで面白みが無い。
たまに誰かがコードにコメントしたら、逆切れしたりする奴もいて面白い。
916デフォルトの名無しさん:2006/07/08(土) 23:31:12
>>913
面倒だから敢えて触れてないだけ。
917デフォルトの名無しさん:2006/07/08(土) 23:34:12
宿題スレはスレッドあぼ〜んしてるw読んでると頭痛がしてくるからw
918デフォルトの名無しさん:2006/07/08(土) 23:34:57
>913
面倒なら763もスルーすりゃいのに。
919デフォルトの名無しさん:2006/07/08(土) 23:37:41
>>913
別に黙らせる必要なんかないのでは?
どんだけ強迫観念があるんだよ。
920デフォルトの名無しさん:2006/07/08(土) 23:38:01
>913
面倒とか言いつつ、的外れなレスを返す辺りステキ。
921デフォルトの名無しさん:2006/07/08(土) 23:39:59
#define exec fork() ? wait() : execl
922デフォルトの名無しさん:2006/07/08(土) 23:40:00
>919
数年前の夏を思い出せ。
無駄にスレ伸ばして鯖に負担をかけるな。
923デフォルトの名無しさん:2006/07/08(土) 23:40:46
>>922
黙らせようとして、見当違いことを長文で垂れ流すほうが迷惑なのでは?
924デフォルトの名無しさん:2006/07/08(土) 23:42:00
チラ裏もそろそろ埋まってきただろう。満足したか?
925デフォルトの名無しさん:2006/07/08(土) 23:46:04
大体において、馬鹿を黙らせようとするとスレが無闇に伸びるはめになる。
馬鹿は荒らし同様、スルーするのが一番。
これ分かってないやつおおいんだよねー。
926デフォルトの名無しさん:2006/07/08(土) 23:47:01
チラシの裏
なんか急に伸びる方向が変わったな。
927デフォルトの名無しさん:2006/07/08(土) 23:48:33
>>700は天才釣り師
928デフォルトの名無しさん:2006/07/08(土) 23:52:44
ひとりの馬鹿があらわれると、集中的に叩かれるの法則。
929デフォルトの名無しさん:2006/07/08(土) 23:54:39
俺は>>770が一番馬鹿だとオモタ
930デフォルトの名無しさん:2006/07/08(土) 23:55:44
931デフォルトの名無しさん:2006/07/08(土) 23:58:10
まあなんだ、お前ら早く職につけと。
職についてるなら集中して仕事しろと。
932デフォルトの名無しさん:2006/07/08(土) 23:58:40
だから、誤ったコードとヘタなコードは違うんだってば
933デフォルトの名無しさん:2006/07/08(土) 23:59:21
>>931
新たな馬鹿発生?
934デフォルトの名無しさん:2006/07/09(日) 00:00:23
馬鹿ばっか
935デフォルトの名無しさん:2006/07/09(日) 00:02:59
結局、自分の下手さ加減を再認識して、早々に立ち去った>>700が一番利口だったとさ。
936デフォルトの名無しさん:2006/07/09(日) 00:27:29
チラシの裏
必要なくてもゼロで初期化する習慣は良い心がけだが、
memsetでゼロクリアするのは間違い。
という結論で良いんだよな?

チャネラー公言してる上司に、変な知識を植え付けないで下さいよ?
937デフォルトの名無しさん:2006/07/09(日) 00:29:35
痛い、心が痛い
938デフォルトの名無しさん:2006/07/09(日) 00:33:15
>>936
>必要なくてもゼロで初期化する習慣は良い心がけだが、
>memsetでゼロクリアするのは間違い。
>という結論で良いんだよな?

良いのではないでしょうか、あなたがそう思うのなら。
939デフォルトの名無しさん:2006/07/09(日) 00:40:19
>>936
見ず知らずの他人を啓蒙するほどのあなたなのですから、あなたの上司も
啓蒙して差し上げてはいかがでしょうか。
940デフォルトの名無しさん:2006/07/09(日) 00:52:05
  \         /_ /     ヽ /   } レ,'        / ̄ ̄ ̄ ̄\
  |`l`ヽ    /ヽ/ <´`ヽ u  ∨ u  i レ'          /
  └l> ̄    !i´-)     |\ `、 ヽ), />/        /  地  ほ  こ
   !´ヽ、   ヽ ( _ U   !、 ヽ。ヽ/,レ,。7´/-┬―┬―┬./  獄  ん  れ
  _|_/;:;:;7ヽ-ヽ、 '')  ""'''`` ‐'"='-'" /    !   !   /   だ.  と  か
   |  |;:;:;:{  U u ̄|| u u  ,..、_ -> /`i   !   !  \   :.  う  ら
   |  |;:;:;:;i\    iヽ、   i {++-`7, /|  i   !   !  <_      の  が
  __i ヽ;:;:;ヽ `、  i   ヽ、  ̄ ̄/ =、_i_  !   !   /
   ヽ ヽ;:;:;:\ `ヽ、i   /,ゝ_/|  i   ̄ヽヽ !  ! ,, -'\
    ヽ、\;:;:;:;:`ー、`ー'´ ̄/;:;ノ  ノ      ヽ| / ,、-''´ \/ ̄ ̄ ̄ ̄
                 ̄ ̄ ̄            Y´/;:;:;\
941デフォルトの名無しさん:2006/07/09(日) 00:53:50
>939
見ず知らずの他人を啓蒙するというより、2chを通じて遠隔操作ってのが正しい。
某板の住人らしいので、こっちの方が効果あるかなと。
942デフォルトの名無しさん:2006/07/09(日) 00:55:32
>>941
直接啓蒙すればよろしい。
943デフォルトの名無しさん:2006/07/09(日) 00:56:36
誰も同意してくれない意味が分からないんだろうか。
944デフォルトの名無しさん:2006/07/09(日) 01:00:06
>943
この時間帯で、スレも沈静化してるのに、
30分も立たない内にレスがくるのを期待しろと。
945デフォルトの名無しさん:2006/07/09(日) 01:01:28
>>930
ほら、また、的外れなことして、
一連の流れで\0をちゃんと付けるみたいなことで議論してたのに
いきなりクラスをmemsetでクリアするみたいな話に挿げ替えてるよね?
こういう卑怯なことするから君は嫌われるんだよw
946デフォルトの名無しさん:2006/07/09(日) 01:04:28
てst
947デフォルトの名無しさん:2006/07/09(日) 01:11:06
>945は>930を誰だと考えてるのか気になった漏れは小心者。
948デフォルトの名無しさん:2006/07/09(日) 01:12:07
>>947
お前、田中だろ?
949デフォルトの名無しさん:2006/07/09(日) 01:12:23
>>936
何か壮大な勘違いをしている予感
950デフォルトの名無しさん:2006/07/09(日) 01:13:48
>>947
俺は>>945が誰なのかの方が気になるのだがw
951デフォルトの名無しさん:2006/07/09(日) 01:16:11
新着450ってw
952デフォルトの名無しさん:2006/07/09(日) 01:21:37
while(honyarara){
for(i=0;i<12;i++){
if(i*k==44){
953デフォルトの名無しさん:2006/07/09(日) 01:24:44
で、やっぱり>>930は嫌われてるの?
954デフォルトの名無しさん:2006/07/09(日) 01:27:14
ageてる点から推測すると、>945=>896で>930=>770と思ってる、かな?
955デフォルトの名無しさん:2006/07/09(日) 01:29:14
まて、>945=>883、>930→>880の可能性も捨てがたい。
956デフォルトの名無しさん:2006/07/09(日) 01:38:29
>>954-955
正解!
957デフォルトの名無しさん:2006/07/09(日) 01:46:09
while(honyarara){
for(i=0;i<12;i++){
if(i*k==44){
loop1:
goto loop2;
}
}
for(i=i*k-12;i<30;i++){
loop2:
if(i*k>36){
goto loop1;
}
}
}

なんでこんなくそコードのメンテしなきゃいけないんだよ。
無限ループの原因が分からないって、お前死ねよ。
そうだよ、川田お前の事だよ。
958947:2006/07/09(日) 01:56:00
>956
だとしたら不安的中。漏れは↓であって>770でも>930でも無い…
>763,769,785,787,847,849,871,880,885,886,891,893,897,901,913,922,926,936,941,944,947
959デフォルトの名無しさん:2006/07/09(日) 01:58:10
ここはレスアンカーが多いインターネットですね
960947:2006/07/09(日) 02:00:05
重要なのが抜けてた。>771,776,780
961デフォルトの名無しさん:2006/07/09(日) 02:00:29
助けて、母さん・・・
心が痛いよ・・・
962デフォルトの名無しさん:2006/07/09(日) 02:01:50
ぱっと見て「ヘンだなぁ」と思う人 >>958
963デフォルトの名無しさん:2006/07/09(日) 02:05:24
誰も変数定義時の初期化の話なんかしてないのに・・・
964デフォルトの名無しさん:2006/07/09(日) 02:10:51
・なんでもかんでもmemset(ゼロクリア) で初期化してると、
処理(文字列等)の潜在的なバグを覆い隠す事があるからダメだよ派

・とりあえずmemset(ゼロクリア)しとけば問題ないだろ派

・やっぱID欲しいよな派
965デフォルトの名無しさん:2006/07/09(日) 02:11:57
やっぱり、>>930は嫌われてるよね。
966デフォルトの名無しさん:2006/07/09(日) 02:12:04
>963
少なくとも>840や>873は「初期化」を意図した発言だと思うが。
>881-804(多分お前もその1人)が訳のわからんレスするから
無駄に伸びるんジャイ。
967デフォルトの名無しさん:2006/07/09(日) 02:13:26
>>964
また、なんでもかんでもとか付けちゃってw
君、自分が有利になるように軌道補正するくせ止めたほうがいいよw
968デフォルトの名無しさん:2006/07/09(日) 02:15:04
>>966
その「無駄に伸びたレス」は君の発言に対するものじゃないんだけどなあ。

完全一人相撲乙。
969デフォルトの名無しさん:2006/07/09(日) 02:15:49
>>966
アンカー間違えてて何言ってるのかわからないよw
970デフォルトの名無しさん:2006/07/09(日) 02:18:58
最大の勘違い発言。
>>847
>いい加減0埋め初期化の是非と、memsetの是非は分けて論議してくれよ…
971デフォルトの名無しさん:2006/07/09(日) 02:20:15
>964
memsetはダメ。ゼロ初期化なら良い。派も追加して下さい。
漏れ一人かもしれんけど…
972デフォルトの名無しさん:2006/07/09(日) 02:21:45
A型がいるな。
過去の戦跡を掘り返して必死で相手の粗を探してるところがほほえましいな。
生まれついての馬鹿で、どんなに努力しても並がやっとなんだから、
発言なんてしないでおとなしくしてればいいのにw
973デフォルトの名無しさん:2006/07/09(日) 02:21:56
やっと一人相撲だったことを認識し始めたようだな。
974デフォルトの名無しさん:2006/07/09(日) 02:22:52
>>972
お前が一番駄目人間なんだけどな
975デフォルトの名無しさん:2006/07/09(日) 02:23:55
A型必死だなw(by即レス普及委員会)
976デフォルトの名無しさん:2006/07/09(日) 02:24:39
>970
>792-844そして>847
977デフォルトの名無しさん:2006/07/09(日) 02:24:47
埋めるか
978デフォルトの名無しさん:2006/07/09(日) 02:26:03
>>976
君がどういう思考回路で>>847をしたかなんて興味ないんだけど。
979デフォルトの名無しさん:2006/07/09(日) 02:26:56
チョンだの糞だのと批判されがちだが、はまった時のB型はとことんはまる。
980デフォルトの名無しさん:2006/07/09(日) 02:27:22
そして彼は最終結論を出した。
>>936
>必要なくてもゼロで初期化する習慣は良い心がけだが、
>memsetでゼロクリアするのは間違い。
>という結論で良いんだよな?

eeee?
981デフォルトの名無しさん:2006/07/09(日) 02:28:23
>970,978
黙って>840,844,847辺りを読み返せ。
それでもまだ言い返す気力があるなら、眼科か精神科逝きやがれ。
982デフォルトの名無しさん:2006/07/09(日) 02:29:14
どうでもいいハナシなので
このスレで終わりますようにとお空にお願いしました
983デフォルトの名無しさん:2006/07/09(日) 02:30:55
>>981
はいはい、ご苦労さん。
984デフォルトの名無しさん:2006/07/09(日) 02:32:26
>>981
そもそも>>763が頓珍漢なんだから、議論にもならないし。
議論してたつもりになっていたのは君だけだよ。
他の人は他の話をしてたんだよ。
985デフォルトの名無しさん:2006/07/09(日) 02:34:13
釣れた釣れたw今日は大漁ww
986デフォルトの名無しさん:2006/07/09(日) 02:35:16
まあ、漏れだの香具師だの言うやつが
>チャネラー公言してる上司に、変な知識を植え付けないで下さいよ?
というのが痛かったな。
987デフォルトの名無しさん:2006/07/09(日) 02:37:08
心の貧しい人たちのスレ
988デフォルトの名無しさん:2006/07/09(日) 02:38:07
>986
(リアルで)「チャネラー公言」そして「某板の住人」「遠隔操作の方が…」に注目。
989デフォルトの名無しさん:2006/07/09(日) 02:39:50
>984
お前が変に読み飛ばしてるのは良く分かったから。w
990デフォルトの名無しさん:2006/07/09(日) 02:43:37
>>989
君がこのスレで正しく議論できたかどうかなんてどうでもいいことでしょ?
君の判断が正しいと信じるなら、2ch経由で上司を啓蒙するなんてまどろっこしい
ことせずに、直接言いたまえ。
991デフォルトの名無しさん:2006/07/09(日) 02:46:58
>>989
そもそも、必要ない0クリアなんてなんでするのって話なんですが。
それでも必要なくても変数定義時の初期化は良い心がけと言い張りますか。
992デフォルトの名無しさん:2006/07/09(日) 02:51:47
>991
やっとノイズが無くなったか。
答えはyes。
何故なら初期化しないと「値が不安定」だから。
テスト・デバッグ時に偶然ゼロとなり、本番での実行時にしか分からない
バグを見逃す可能性がある。
それに比べりゃ潜在的に間違ったコード書くくらい可愛いこった。
993デフォルトの名無しさん:2006/07/09(日) 02:56:24
>>992
int ret = 0;
ret = foo();

このretの初期化は良い習慣?そうではない?
そうではないとしたら、その理由は?
994デフォルトの名無しさん:2006/07/09(日) 02:58:32
>993
お前が1人で開発してるならretの初期化は不要。
だが1人じゃ無いなら、誰かが宣言の後に何かを追加する可能性を考慮しろ。
また初期化の有無に気を付ける位なら、その注意力を他に回せ。
995デフォルトの名無しさん:2006/07/09(日) 02:59:31
このretの初期化は不要なのに、charの配列のときに必要な理由は?
996デフォルトの名無しさん:2006/07/09(日) 03:00:59
>>992
あのー、それmemsetで0クリアしときゃバグっても大丈夫派と同じ意見なんですが。
997デフォルトの名無しさん:2006/07/09(日) 03:01:53
>>994
>誰かが宣言の後に何かを追加する可能性
例えばどんなコードを追加されると問題になりますか?
998デフォルトの名無しさん:2006/07/09(日) 03:02:23
>995
(1)>994を読んでた場合
よく読め。
(2)>994を読んでない場合
先走りすぎ。w
999デフォルトの名無しさん:2006/07/09(日) 03:03:10
最後まで意味不明な奴だったな。
1000デフォルトの名無しさん:2006/07/09(日) 03:04:11
retの初期値が0である事を前提にしたコードを書くと、
後の仕様変更でretの初期値が非ゼロとなった場合に困る。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。