あなたのまわりの糞コード

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
糞すぎて、ある意味美しさすら感じるようなコードを見せてクレー
(身元がばれない程度に)
2デフォルトの名無しさん:2001/02/03(土) 17:06
int a[16];
for( int i=0; i<=16; i++){
 a[i]=.......
}

デバッグさせられる方の身にもなってみろ……
3デフォルトの名無しさん:2001/02/03(土) 17:18
>>2
まぁ、そもそも即値なのがまずいのかもしれないけど、
ローカルだったら許せなくも無いレベルかなぁ。すぐ気づくでしょ。
境界関係はデバッグ時の優先チェック項目だよね。

4デフォルトの名無しさん:2001/02/03(土) 17:34
>>3
#define array_sizeof( array ) ( sizeof( (array) ) / sizeof( (array[0]) ) )
を使うとか。
53:2001/02/03(土) 17:39
>>4
うん、私はそういう感じにしてます。
でも2の場合の直接の問題は < と <= だからねぇ。
6デフォルトの名無しさん:2001/02/03(土) 18:13
境界侵犯関係の調査は、PURIFYとかBoundsChecker使うのが楽。
リークしてないのにリークと報告するような事もあるけど、
メモリアクセス上のバグを沢山自動検出してくれるのはありがた
いっすよ。
7デフォルトの名無しさん:2001/02/03(土) 18:26
>>3
ちなみにJavaなら、実行した瞬間にRuntime例外が飛んでくれて、
スタックのトレースはいてくれるので、楽チン。
8C#:2001/02/03(土) 19:09
ボクもだぞ!
9Perl:2001/02/03(土) 19:38
勝手に配列のサイズが増えちゃいます。テヘ。
10Pascal:2001/02/03(土) 20:06
var a: array [0..15] of Integer;
ってやるから、すぐ気づくんだよなぁ。
11Pascal:2001/02/03(土) 20:07
つーか、これがあった…
for i := Low(a) to High(a) do begin
 a[i] := ...
end;
12あはは、:2001/02/03(土) 21:42
あなたのまわりの糞こおどぉー♪

歌っちゃったりなんかしてぇ〜・・・
13デフォルトの名無しさん:2001/02/03(土) 21:43
Cはsizeofしかないからなあ・・
マクロ定義じゃウザクなるだけだし・・・
14デフォルトの名無しさん:2001/02/03(土) 21:59
C言語でinlineキーワード使える処理系使えば?>13
32bitではVisualC++やBCC55、GCCとかかな。
16bit処理系で無い?
15デフォルトの名無しさん:2001/02/03(土) 22:10
mallocしてfreeしないコード
16ボログラマー:2001/02/03(土) 22:30
switch( n )
{
case 'A':
case 'B':
case 'C':
case 'D':
 switch( n )
 {
 case 'A':
 case 'B':
 case 'C':
 case 'D':
  ......
  break;
 }
 break;
}
無駄に2重switch。
・・・いや、だから何がしたかったんだ?
17デフォルトの名無しさん:2001/02/03(土) 22:31
>>15
freeしてmallocしないコード
18デフォルトの名無しさん:2001/02/03(土) 22:35
>>17
mallocを知らなくて何でもかんでもstaticに取るコード
19みんな経験あるでしょ:2001/02/03(土) 22:36
Cしか知らない奴がはじめて書いたC++/Javaのコード。
20デフォルトの名無しさん:2001/02/03(土) 22:40
>>19
う、耳が痛い。
21デフォルトの名無しさん:2001/02/03(土) 23:01
f(); /* fを呼ぶ */
22デフォルトの名無しさん:2001/02/03(土) 23:35
count--; /* カウントアップ */
23デフォルトの名無しさん:2001/02/03(土) 23:44
配列を知らないのか、n_00〜n_13までの14個の引数を
ずらずら書き連ねた関数の宣言。客先で倒れるかと思った。

作ったのは下請けの新人らしい。
24デフォルトの名無しさん:2001/02/03(土) 23:49
#define _
for (;_;) {
...
25デフォルトの名無しさん:2001/02/04(日) 00:11
「リファクタリング」には糞コードの実例(とその改善方法)が
山のように載ってるな。
26デフォルトの名無しさん:2001/02/04(日) 00:24
お約束サイト: 「いかにしてメンテナンス不能なコードを書くか」 http://mindprod.com/unmain.html
27デフォルトの名無しさん:2001/02/04(日) 00:27
メンテナンス不要じゃないのね・・・・
28デフォルトの名無しさん:2001/02/04(日) 03:09
>>26
面白かった。ありがとう。
LISP is a dream language for the writer of unmaintainable code.
てのがワラタ
29デフォルトの名無しさん:2001/02/04(日) 07:14
p++; // ポインタをインクリメント
30デフォルトの名無しさん:2001/02/04(日) 08:28
for( i = 0; i < 10; i+=1)
31デフォルトの名無しさん:2001/02/04(日) 09:50
>>29
え?だめなの?
int i, val[100], *p;
p = val;
for( i = 0; i < 100; i++, p++)
  *p = 0;
とかやんない?
この場合はインデックス使った方が良いけどさ。
32デフォルトの名無しさん:2001/02/04(日) 11:40
>>31
>>29のは、しょうもない無意味なコメントを書くなってことだろ
33デフォルトの名無しさん:2001/02/04(日) 13:53
>>31
おばか?
あんたもしかしてこんなコードかくでしょ

#include <stdio.h> /* stdio.h を include */

main() /* main関数 */
{
  int i = 0; /* int 型 i を宣言、値を 0 にする */

  for(i = 0; i < 10; i++) /* i を 0 から 9 までインクリメントする for 文 */
    printf("hello, world\n"); /* hello, world を printf する */

}

うざぃ。
34デフォルトの名無しさん:2001/02/04(日) 14:39
uchar i;
for (i = 0; i < 256; i++) ...
35デフォルトの名無しさん:2001/02/04(日) 17:58
>>34
always true な Warning 出ないっけ?
36名無しさん@1周年:2001/02/04(日) 18:12
// 機能: データに値をセットします。
//
extern void PutData(int *data);
37名無しさん@1周年:2001/02/04(日) 18:15
public class HandlerBase implements ...{
...
}

DOM/SAX 系 API は全部苦ソ。
38デフォルトの名無しさん:2001/02/04(日) 18:38
以前、この板で見たコード。

for(i = 0; i < strlen(s); ++i)
...

for の条件判定の中で strlen を使うなよと思った。
39デフォルトの名無しさん:2001/02/04(日) 18:55
マァマァ掲示板のコードはロジックにとどめて最適化は各自がするってことで
40デフォルトの名無しさん:2001/02/04(日) 21:25
>>38
なぜ? 説明してね(はぁと)
41デフォルトの名無しさん:2001/02/04(日) 21:31
strlenが毎回実行されるってこと?
42デフォルトの名無しさん:2001/02/04(日) 21:38
38>>41
そうだよ。
43マジデ:2001/02/04(日) 22:01
>>37
DAMN/SUCKS 系 APE とは何でござるか?
44デフォルトの名無しさん:2001/02/04(日) 22:13
>for の条件判定の中で strlen を使うなよと思った。

vector<むにゃむにゃ> vec;
vector<むにゃむにゃ>::iterator iter;

for (iter = vec.begin(); iter != vec.end(); iter++) {
 :
}

どう思う?
45デフォルトの名無しさん:2001/02/04(日) 22:17
vec.end()は明らかに軽いので問題なし。
strlen()は明らかに重いので問題あり。
46デフォルトの名無しさん:2001/02/04(日) 22:22
>>44
それはふつうの書き方だと思う。

forの中の strlen()は、そもそもforループ自身が文字列を頭から
順番になめる処理なのに、同じような処理を行うstrlenをループごと
に毎回実行していて、気持ち悪すぎ。
47デフォルトの名無しさん:2001/02/04(日) 23:19
こういう玄人のグチを聞いて、素人はレベルアップしていくわけです。
48デフォルトの名無しさん:2001/02/04(日) 23:20
>>47
この程度の事でいちいち玄人扱いしちゃいかんとおもう。
49デフォルトの名無しさん:2001/02/04(日) 23:31
while(1){
 ..
 if ((err = func()) != NOERROR)
  break;
 ..
 if ((err = func2()) != NOERROR)
  break;
 ..
 break;
}
 if (err){
 ..
 }
 ループではないのです。
 関数分ければいいのに...

50デフォルトの名無しさん:2001/02/04(日) 23:39
returnは関数内で一個だけ!とかいう、
脳梗塞糞馬鹿SEの氏んで欲しい仕様の犠牲者ですね、その関数。
大手いくとたまにそんなあほな仕様が標準化されてるんだよね。
51デフォルトの名無しさん:2001/02/04(日) 23:46
あと、なにが何でもGOTO禁止!とかもルールにあるみたいだね。
アホか!と思うが。おいらならせめてこう書く。goto使っても
分かりやすくてよみやすい方がいいと思う。

if(func()) goto err;
if(func2()) goto err;

return;

err:
//ERROR処理
return;
真のプログラマは、GOTOの使用を恐れない。 ??
53デフォルトの名無しさん:2001/02/04(日) 23:57
>>49
その書き方はCマガのあっぱれご意見番(だったかな?)で紹介されてたな。
51のような、エラー処理をgotoで飛ばす書き方の代用だそうだ。
(その後、読者からdo{}while(0)を使ったほうが良いとか指摘されてたな。たしか)
54デフォルトの名無しさん:2001/02/04(日) 23:59
エラー(例外)処理へのgotoなら許す!
55デフォルトの名無しさん:2001/02/05(月) 00:02
>>51 プログラマと呼ばれている人たち全てが君のレベルまで達していれば
それでもいいんだけどね。
56デフォルトの名無しさん:2001/02/05(月) 00:05
try{
 func();
 func2();
}
catch(Error e){
 //error processing
}

C++風に書こうよ。
5751:2001/02/05(月) 00:08
>56
そりはC++かJavaの時でないと…
Cの最近の言語仕様にはtry、catchあるのかな?
知らんかった。ちょっとうれしい。
58デフォルトの名無しさん:2001/02/05(月) 00:10
Cでは無理です。>57
59デフォルトの名無しさん:2001/02/05(月) 00:13
ねえよ>57
60デフォルトの名無しさん:2001/02/05(月) 00:13
Javaなら、こういう話の流れではやはりラベル付きbreakを…
61>:2001/02/05(月) 00:25

こんなの
if (!func1() || !func2() || ....) {
しっぱいしちゃった...
}
でいいじゃん。

gotoを使うことは恐れないが、最初っからgotoを使いたくなるような
状況に陥らないのが達人。間抜けに「gotoを恐れるな」とか教えると
エラー処理ごときでも乱用するからたまらん。
6251:2001/02/05(月) 00:33
>61
異常処理が全部共通ならそれで十分だね。スマソ。
でも関数を10個20個コールしていて、異常処理が3、4パターンくらい
とかいう時には、gotoつかうのが一番すっきりしそうだと思うんだけど。
63デフォルトの名無しさん:2001/02/05(月) 00:36
あるいはエラー発生位置を知る必要があって、なおかつエラー発生位置用の
グローバル変数など使いたく無い場合とか
64デフォルトの名無しさん:2001/02/05(月) 00:45
そういえば真紀大先生が昔Cマガでthrow, catch風の
Cのマクロの実装を大威張りで解説してたな。

もっと昔にha例外処理なんてよっぽど
大規模なアプリ以外いらん。とも言ってたな。
65デフォルトの名無しさん:2001/02/05(月) 01:01
あの人痛いよね。>64
あんなんで原稿料貰ってると思うと腹が立つのでこの話題はもうおしまい。
6661:2001/02/05(月) 01:06
>>62
そうなるとケースバイケースだね。大抵の場合はうまくサブルーチン
分割できると思うけど、状態機械みたいなのを書いてるときはgotoの
ほうがすっきりすることも多い。

67名無しさん@1周年:2001/02/05(月) 02:34
>>43
X-ML のスレッドを解析&構築するための API。
68デフォルトの名無しさん:2001/02/05(月) 07:31
>>66
状態機械の場合は、状態遷移表を書いて
その表の通りに処理するようにかけば
gotoはいりませんよ
69一生懸命探す奴:2001/02/05(月) 10:50
extern unsigned short table[];
// table[0x2121] = 0x8140; のような、128KBの変換テーブルが作ってあると思ってくれ。

unsigned short JIStoSJIS(unsigned short jis)
{
  return table[jis];
}

unsigned short SJIStoJIS(unsigned short sjis)
{
  unsigned short jis;
  for (jis = 0x2121; jis < JIS_MAX_CODE; jis++) {
    if (table[jis] == sjis)
      return jis;
  }
}
70デフォルトの名無しさん:2001/02/05(月) 11:18
>>36
関数の宣言に extern を付けるのがダメってことだよね。
71デフォルトの名無しさん:2001/02/05(月) 12:44
>>70
いやメソッドの先頭が大文字だからだ
Javaみたく「putData」にすべきだ
72デフォルトの名無しさん:2001/02/05(月) 12:53
あまり大した事は無いが、
unsigned int Hogehoge() {
73デフォルトの名無しさん:2001/02/05(月) 12:53
あまり大した事は無いが、
unsigned int Hogehoge() {
・・・
return -1;
}
と言うなら見たことがある。
74デフォルトの名無しさん:2001/02/05(月) 13:09
つーか、WinAPIのヘルプに
BOOL InitApplication(HINSTANCE hinstance)
{
  …
  return RegisterClassEx(&wcx);
}
というコードがあるのだが。
確かにBOOLはintのtypedefだけど・・・
75デフォルトの名無しさん:2001/02/05(月) 13:20
ちょっと話がずれるが
コピペを大量に使うことは駄目なのか??
コードを再利用してるんだから
いいと思うんだけど
なんか駄目みたいに言う奴がいるんだけど・・。
76デフォルトの名無しさん:2001/02/05(月) 13:29
ソースレベルの切り貼りを「再利用」などと言わねぇって。
77デフォルトの名無しさん:2001/02/05(月) 13:29
そのコピペしたコードが間違えてたら全部直すのか?
漏れがあったらどうする?人海戦術か?
78デフォルトの名無しさん:2001/02/05(月) 13:37
コピペするくらいなら関数にして呼び出せば? ってことでしょ。
俺はあんまし守ってないけど。
79デフォルトの名無しさん:2001/02/05(月) 13:50
あんま共通化すんのもなぁ・・
例えばAって関数をBとCから呼び出してるとして、
Bの仕様がちょっと変わってAを修正したとするじゃない。
そんときCもテストし直さなきゃなんないのが面倒くせぇの。
80デフォルトの名無しさん:2001/02/05(月) 13:51
リファクタリング読
81デフォルトの名無しさん:2001/02/05(月) 13:58
Bの仕様がちょっと変わったら、Bをちょっと修正すりゃーいいんじゃないのか?
たとえがよくわからん。
82デフォルトの名無しさん:2001/02/05(月) 14:47
意味もなく class を使っている C++コード。
オブジェクト指向 じゃないのに、class を使っている。
C言語ユーザーが、オブジェクト指向という概念を勉強せずに、
言語の機能を使うとこういうことになる。
 むかしの私。
83デフォルトの名無しさん:2001/02/05(月) 14:49
>>79
機能の切り分けとがまずいとか、そもそも設計で間違ってるとか、
そんなんじゃないのか?
8479:2001/02/05(月) 16:43
最初はBとCでおんなじ項目出力してたから出力部分を共通化してAにしてたけど
Bだけに出力項目が追加になったとか、そんな感じ。

あんま詳しく言えんけどなんか今やってんのそんなんばっか。
最初は同じような処理が多いんだけど、時間が経つとビミョーに
変わってくんの。
85デフォルトの名無しさん:2001/02/05(月) 18:07
そんなん変更があった時点で、
Bから出力処理を呼び出すところを変えればいいじゃん。
始めは共通化しとくべきた。デバッグ面倒だろ?
86デフォルトの名無しさん:2001/02/05(月) 18:40
#define THE_CARDINAL_OF_EMPTY_SETS 0
#define THE_FIRST_ENTITY_IN_THE_NATURAL_NUMBER THE_CARDINAL_OF_EMPTY_SETS
#define THE_ONLY_ONE_NUMBER_WHICH_CAN_BE_USED_TO_COMPUTE_SUCCESSIONS 1
#define succession(x) ((x) + THE_ONLY_ONE_NUMBER_WHICH_CAN_BE_USED_TO_COMPUTE_SUCCESSIONS)
int i;
for(i = THE_FIRST_ENTITY_IN_THE_NATURAL_NUMBER; i < 10; i = succession(i)) { ... }
87デフォルトの名無しさん:2001/02/05(月) 18:41
あっ、CARDINAL じゃなくて CARDINALITY だったっけ…?
鬱だ氏のう
88デフォルトの名無しさん:2001/02/05(月) 19:13
俺もこれくらいのコードは書きたい
http://www.ioccc.org/years.html
89>88:2001/02/05(月) 19:58
素でそんなん書きたくない(;;
9079:2001/02/05(月) 20:13
>>85
そう。それで今までAを呼び出してた部分をやめて
AからコピペしたものをBに内包する。ほんでそこを直す。
Aを直すとCもテストし直さないとなんないから。
なんであんまり共通化されてない。ってこと。
91デフォルトの名無しさん:2001/02/05(月) 20:37
float Aa, Ah, Av, Ac, Ax, Ay; /* constant of shikisa */
92デフォルトの名無しさん:2001/02/05(月) 20:51
p>例えばAって関数をBとCから呼び出してるとして、
>Bの仕様がちょっと変わってAを修正したとするじゃない。
>そんときCもテストし直さなきゃなんないのが面倒くせぇの。

A自体の関数単体テストの結果が、両方の場合で同じなら
Cの再テストは必要無かろう。
分けるとはそういうこと。

ついでに、そういう場合は、
Bの変化に合わせてあげるのをA'とするなら、
Aはそのままで、Aを利用するA'を作るだろう。
または、被せる形でのA'が無理なら、
AとA'に共通した部分を抽出した(新たな)関数に
Aの役目をする(新たな)被せ関数と、
A'の役目をbする(新たな)被せ関数を作るもんじゃない?
どっちにしろAとしての振舞いに関しては、最初の段落の通り。
93デフォルトの名無しさん:2001/02/05(月) 23:52
俺のPCの中に死ぬほどあるぞ。
94デフォルトの名無しさん:2001/02/06(火) 13:07
でも、動けばいいやって思っちゃうときはあると思う
95アマ:2001/02/06(火) 13:45
他人の書いたコードなんてどうでもいいな。
9679:2001/02/06(火) 16:06
>>92
修正のたんびにそんなことしてたら関数いくつあっても
足りんよ(´Д`)
97デフォルトの名無しさん:2001/02/06(火) 16:41
いまだに
1.変数名がVAR1000,VAR1010...
2.サブルーチン名がSUB1000,SUB1010...
3.ファイル名がPROG1000,PROG1010...
.
.
.
(泣)
98デフォルトの名無しさん:2001/02/06(火) 17:56
表定義が
ABSASA
ABSBSA
ABSASB

更にその中の項目が
DATA001
DATA002
DATA003


しかも標準で決められる・・・
99デフォルトの名無しさん:2001/02/06(火) 19:22
なんだその糞会社!糞標準!人間は機械じゃねえ!!
100デフォルトの名無しさん:2001/02/06(火) 22:22
>>97-98
これなら変数名つけるのが楽だね。
見習おう。
101デフォルトの名無しさん:2001/02/06(火) 23:04
大昔のメモリ不足時代の識別子文字数制限の遺物だね。
20年前なら標準でも仕方ないけど、今そんな
ケチなシステムってあんまりないはずだが…
102デフォルトの名無しさん:2001/02/06(火) 23:43
変数名も関数名も7文字「も」あるじゃん...
というのはともかく
画面名が番号で振ってあるってのはワリとあるのでは。
で、仕様の画面名に合わせてコーディングするとソースもそうなるのな。
10398:2001/02/07(水) 16:28
>>101
その20年前の仕様を未だに引きずってる。
しかもWindowsやUNIXを使ってるのに。
104デフォルトの名無しさん:2001/02/08(木) 10:24
>>103
お気の毒に...
給料までも20年前の額を未だに引きずっていないことをお祈りいたします。
105デフォルトの名無しさん:2001/02/15(木) 17:25
>>70-71
コメントが無意味ってことじゃない?
106>105:2001/02/15(木) 17:49
2ちゃんねるネタ心者の方は、メール欄を読むことも覚えましょう。
107デフォルトの名無しさん:2001/02/18(日) 12:17
こんなの
if (!func1() || !func2() || ....) {
しっぱいしちゃった...
}

はまずいでないの
func1()・func2()・・・・
の実行順番は保証されてないのではなかったかな
108デフォルトの名無しさん:2001/02/18(日) 12:48
while(1){
 ..
 if ((err = func()) != NOERROR)
  break;
 ..
 if ((err = func2()) != NOERROR)
  break;
 ..
 break;
}
 if (err){
 ..
 }
私は、こういう書き方すきなんですが
コーディング規則に無限ループの禁止
というのがあってチェックにひっかかりました
そこで
do{
・・・
}while(0==1);
にして逃げたのですが
分岐ごとにトレースを入れろというコーディング規則があって
if( .. ){
TRACE(.....);
break;
}
になりまして
さらにif()の中に関数を書いてはだめというコーディング規則がありまして
err = func();
if (err != NOERROR){
TRACE(.....);
break;
}
さらにコメントに関するコーディング規則もあって
結局もともと5・6行のものが
do{
...約60行
}while(0==1);
になってしまいました
doでもwhileでもif for switchでも
中身が長いと読みにくくなりますね。
109デフォルトの名無しさん:2001/02/18(日) 13:06
>>107
まずくないよ。
左から評価されることも真偽が確定された時点で評価が打ち切られるこ
とも保証されてる。
110デフォルトの名無しさん:2001/02/18(日) 15:31
>>109
&&と||と,演算子は評価順番が決まってるのね
あと?:もそうか
+ や - や |なんかとは違うわけね
納得
111デフォルトの名無しさん:2001/02/22(木) 21:33
今日発見 だいたいこんな風
for(i=1;i<20;i++){
switch(b[i]){
case 1:
・・・・
break;
case 2:
・・・・
continue;
case 3:
・・・・
goto end_for;
case ・・・・

case 20:
break;
default:
continue;
}
・・・・
}
end_for:

ちょっと工夫すれば、gotoはいらないし
よくしってれば、switch文もいらない
ただ switchがいいかジャンプテーブルがいいかは
意見が分かれるとこだけど

112デフォルトの名無しさん:2001/02/22(木) 21:36
if( val % 1 == 0) func() ;

馬鹿だとおもつた
113デフォルトの名無しさん:2001/02/22(木) 22:14
デバッグ時に
 if( val % 2 == 0) func() ;
とか
 if( val % 3 == 0) func() ;
とか、試行錯誤してそうなコードだな…。
微妙。
114デフォルトの名無しさん:2001/02/23(金) 00:32
>111
最近のコンパイラはswich文をジャンプテーブルに変換してくれるyo。
(gcc2952やVisualC++6で確認した)
アセンブラ出力見てみ
115デフォルトの名無しさん:2001/02/23(金) 00:58
>>114
default: ついててもか?
116114:2001/02/23(金) 02:13
>>115
ジャンプテーブルが有効になる条件について詳しくは知らん。
自分で確認しろyo
117名無しさんi486:2001/02/23(金) 02:22
107に関連して・・・
if( !(aho() && kuso()) ){
  ...
}
ド・モルガンくらいは知ってけよ。
118名無しさんi486:2001/02/23(金) 02:30
↑あ、ahoとkusoは変数ね。
119デフォルトの名無しさん:2001/02/23(金) 02:36
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&
SUCCEEDED(pD3D->SetRenderState(〜〜)) &&



SUCCEEDED(pD3D->SetRenderState(〜〜));
120117:2001/02/23(金) 03:00
あれ・・・鬱だ寝よう。
121名無しさん@お腹いっぱい。:2001/02/23(金) 03:00
3000千ステップのメソッドが有った。
122デフォルトの名無しさん:2001/02/23(金) 08:13
int data[10];
for(i=0;i<10;i++);
{
InitData(data(i));
ListAdd(data(i));
}

みたいの書いて当たり前だがまともに動かず、一日悩んだ事があります。
自分ではもっとも情けない失敗だったな。
123122:2001/02/23(金) 08:15
しまったタブ失敗した。
124デフォルトの名無しさん:2001/02/23(金) 09:00
*p/*q;
125デフォルトの名無しさん:2001/02/23(金) 09:55
げ、クソコード発表なんて言われたら、いま移植作業担当
してるプロダクトの全ソース公開したくなるな。

覚えてるヤツ書くか。

---
char tag[4];
char a1[10];
char a2[10];
int i, j, l;

tag[0] = 'A';
tag[1] = 'A';
tag[2] = ';';
tag[3] = NULL;

sprintf( a1, "%d", hoge );
sprintf( a2, "%d", fuga );
for ( i = 0; i < 3; i++ ) {
 if ( i == 2 ) {
  l = strlen( a1 );
  for ( j = 0; j < l; j++ ) {
   fputc( a1[j], outfp );
  }
  fputs( ",", outfp );
  l = strlen( a2 );
  for ( j = 0; j < l; j++ ) {
   fputc( a2[j], outfp );
  }
 }
 fputc( tag[i], outfp );
}
---
これ書いたヤツはfprintf()を知らんのか?いや、その
前にsprintf()とfputs()知っていながら何故こんな
書き方するんだ?
あと'\0'とNULLは違うだろ。整数型変数の初期化でNULL
代入しているのは許すが、浮動小数点型もNULLで初期化
すんのヤメレ。コンパイルエラーになる。
126125:2001/02/23(金) 09:59
あと、こんなの。

---
char *p;

p = (char *)malloc( size );

・・・・・どっかのループの中

p = p + 1;

・・・・・どっかのループの中終わり

free( p );
---
これで落ちてない移植元ってステキ。
127125:2001/02/23(金) 10:05
他にはグローバル変数が、ソース中で使用されている
範囲が10行ほどの間だけとかにちじょうちゃめしごと
(日常茶飯事)。

128デフォルトの名無しさん:2001/02/23(金) 15:12
ちょっとヨロシク
129デフォルトの名無しさん:2001/02/23(金) 18:37
>>127
よくあるよくある。
130デフォルトの名無しさん:2001/02/23(金) 18:50
ソースを変更する場合、関数に引数を追加すると、
ドキュメントを書き直したりレビューを開催したりで面倒なので、
なるべくグローバルにすること。

…という会話が、隣の島から聞こえてきたことがある。
131学生D:2001/02/23(金) 19:07
>>130
それ逆の方が良いと思うんですが、、、
「グローバル変数を追加する時は会議を開くべし」
とか………
132デフォルトの名無しさん:2001/02/23(金) 19:30
グローバル変数を新たに追加する場合は認可手続が必要になるので
まえもって大目に申請しておくこと。
133デフォルトの名無しさん:2001/02/23(金) 19:43
それでも足りなくなったら、共有メモリを使用。
134デフォルトの名無しさん:2001/02/23(金) 19:56
グローバル配列変数を型ごとに1000個くらい確保しておいて、
各自勝手に使うというのはどうだろうか?
135デフォルトの名無しさん:2001/02/23(金) 19:59
で、誰がどれを使うか&使っているかをグローバル変数で・・・
136デフォルトの名無しさん:2001/02/23(金) 20:16
>>134
>>135
じゃあ、誰がどれを使っているかを管理する関数を書こう。
名前はそうだな...malloc()だ。
137デフォルトの名無しさん:2001/02/23(金) 21:46
偉大な歴史の1ページをかいま見た気がするよ
138デフォルトの名無しさん:2001/02/23(金) 23:06
Cのコメントにギコ猫を書いている奴がいた。
それをそのまま出荷した。
139デフォルトの名無しさん:2001/02/23(金) 23:26
ゲーム機のプログラムではmalloc使うと怒られます。
140デフォルトの名無しさん:2001/02/23(金) 23:29
VBのコードだけど…

Dim i as Integer

for i=0 to 99999999
if 終了条件 then
exit for
end if
何らかの処理…
next

141駄洒落魔神:2001/02/23(金) 23:47
ミスターmalloc
142デフォルトの名無しさん:2001/02/24(土) 01:03
>>141
war
143デフォルトの名無しさん:2001/02/24(土) 01:05
>>139
うっそーん!?
つうかないならないで、メモリマネージャは自力実装だわな、普通。
144デフォルトの名無しさん:2001/02/24(土) 01:25
PS2ではバリバリ使ってるよ。STLもな >>139
145デフォルトの名無しさん:2001/02/24(土) 01:28
PS2のライブラリは糞ってホント?
146デフォルトの名無しさん :2001/02/24(土) 01:52
>144
ゲームでSTLって何に使うの?
147144じゃないが:2001/02/24(土) 03:52
楽だからだろ
アルゴリズム考えなくていいから
148デフォルトの名無しさん:2001/02/24(土) 09:04
>>144
普通使うか?
メモリ確保できなかったときどんな処理するんだよ。
ゲームはエラー出して止まる訳には行かないんだぜ。
149デフォルトの名無しさん:2001/02/24(土) 10:36
>>148
仕様によっては、必要なメモリ量がわからないときがあります。
仕様が悪いんだけど、ものわかりの悪いSEに説明するとコンピュータの
基礎から教えなくちゃいけないのでほっときます。
どっちにしろメモリが足りなくなったら止まってしまいます。
150144:2001/02/24(土) 15:14
>>148
>メモリ確保できなかったときどんな処理するんだよ。
ふむ。ヒープを使わなくても、あらかじめ用意しておいたバッファ量
以上のデータは扱えないでしょ? 同じことだよ。

質問に対する答えは「メモリ確保できないようなデータは使わない」
だね。
151デフォルトの名無しさん:2001/02/24(土) 16:12
PSで組めって言われたら俺も使わないと思うけど、
PS2くらいあれば使ったってかまわないだろ。
もちろんそれ相応の注意はいると思うけど。
152144:2001/02/25(日) 01:54
>>151
先輩はPSでも使ってたなぁ。
ま、ゲームの種類などにもよるから一概にはいえんよ。
153:2001/02/25(日) 03:28
ヒープ(malloc)でのメモリ確保だと、malloc/freeする順番により
隙間ができたりするのでデバッグが大変だと思うのですが。
ゲーム開発で使うなんて信じられん。
154デフォルトの名無しさん:2001/02/25(日) 05:20
mallocというか、ヒープはつかうでしょ、普通。
虫食いは確かに困るけど、そのへんは気をつけて組むし。
ヒープ禁止して異様なプログラムスタイルになるほうが
よっぽど害になると思うのだが。
155デフォルトの名無しさん:2001/02/25(日) 09:24
ヒープは使うが、malloc相当のものは自分で用意するし、
コーディング自体も、不確定な領域を適当にmalloc相当関数で
取得する、なんて事は絶対しないな。
156144:2001/02/25(日) 12:51
>>153
メモリ上に常駐する領域と、一時領域の確保戦略を違うものにすれば、
隙間ができる問題はほとんど無視できるでしょ。

>>155
malloc相当のものを自分で用意するかはいつも悩むんですが、
システム側の関数(特にprintf系)がmallocを使っていることが
多くて、なかなか悩ましいですね。
mallocのインターポジショニングで確実にシステムライブラリ内の
メモリ確保系を乗っ取れているのか確認が難しいしなぁ...
157デフォルトの名無しさん:2001/02/25(日) 13:18
古い話題で悪いけど、
for(i=0;i<strlen(s);i++)
...
って、最適化の対照にならないんですかね?

わざわざint l=strlen(s);とかやるのって美しくないし。
ループの内容によっては、
for(i=strlen(s);i>=0;i--)
...
って書くのが美しいけど
158デフォルトの名無しさん:2001/02/25(日) 14:03
>>157
ループの中でsのサイズが変わっていない事を、
コンパイルの時に確認するのは面倒そうだしね。
なかなか最適化の対象にはならないんじゃないかな。
159デフォルトの名無しさん:2001/02/25(日) 14:06
printf系がmalloc使っているのは、常々止めて欲しいと思う。
といっても仕方がないのかな。
160デフォルトの名無しさん:2001/02/25(日) 14:31
157>>158
まぁそうかもしれない。
これくらいのことは人間が最適化をするのが一番かな
今思いついたけど、一番エレガントな方法は
for(i=0;s[i]!='\0';i++)
...
かな
ちなみに>>157の下のコードはバグがあるな。情けなや
161デフォルトの名無しさん:2001/02/25(日) 14:40
>>157
C文字列ならばfor(p=s;*p!='\0';p++)
またはfor(i=0;s[i];i++)
などなど
意味は、for(i=0;i<strlen(s);i++) が一番わかり易いと思う。
162>>161:2001/02/25(日) 14:59
s[i]は良くない。
意味的に「これはゼロ文字で終了するcharの配列」って事を
以後読む人に一瞬で伝えるためにも、
ここは157さんのように「s[i]!='\0'」とすべき。

逆に、pがchar*ならば、大抵文字列へのポインタだから、
for(p=s;*p;p++)で良いかと。
ただこの場合、forが0からまわってないから、
157さんの意図とは違うと思われる。
163デフォルトの名無しさん:2001/02/25(日) 16:00
c=c++;
164デフォルトの名無しさん:2001/02/25(日) 16:29
>>155
言ってる事が良くわかんないのですが。。。
malloc相当のものは自前で用意するのに、
その用意した関数でメモリ確保したりしないの??

malloc相当のものを自作して使用するのなら、
素直にmalloc使っておけ、と思うのは間違ってますかね?
その自作したmalloc相当のほうが、
はるかにメモリ割り当て戦略が優れている、とか、
ぜったい隙間ができない、というのなら自作も良いかも知れないけど。
というか、そういうヒープ管理の方法あったら教えて欲しい。
165デフォルトの名無しさん:2001/02/25(日) 21:49
隙間ができたらつめるってのはどうですか?
アドレスが変わるじゃねーかゴルァというツッコミに対しては、
ポインタはテーブルで引くことにすれば解決。
166デフォルトの名無しさん:2001/02/25(日) 21:54
>>165
それはMS-Windows 3.x以前やSX-Windowで言うところのメモリハンドル
みたいなもんなので、MMUがなかった昔のコンピュータが使ってた常套手段。

コンパクションすると、マーク&スイープ式ガベージコレクタみたいに
処理が止まるとこが、ゲーム屋的に許容できないと思う。
167デフォルトの名無しさん:2001/02/25(日) 23:19
>>164
155ではないが、mallocを自作するのは優れているからというより、
メモリ管理まわりの挙動を自分で管理したいからってのが本音だね。

で、結局不確定なサイズを取得したり開放したりを繰り返すのは、
どうしてもメモリに虫食いが出来るので、あまりやらない。
虫食いが出来ると、メモリに収まるようにデータ・使用メモリサイズ
設計していても、失敗する可能性が出てくるので、限界までメモリを
使うことが出来なくなってしまうし。

だから結局ある程度計画的にメモリ確保や開放を行うので、パソコンで
プログラムする人がやるような、必要なところで確保して、使い終ったら
すぐ開放するみたいな使い方はしないのです。
168デフォルトの名無しさん:2001/02/25(日) 23:32
>>164
家庭用ゲーム機やアーケードのゲームだと
ある1シーン内(タイトル画面とか、戦闘モードとか)で使うメモリを
自作mallocで確保して、シーンが変わったら
ヒープまるごと初期化とかよくやるっす。
これなら少々予期しないリークがあっても大丈夫なので。
169デフォルトの名無しさん:2001/02/25(日) 23:43
ゲーセンだと最低14時間(10:00〜24:00)ピンピン動いてくれなきゃ困るし、
50時間かかるRPGをノンストップでクリアするよーな人もたくさんいますからな。
しかもメモリは2MB〜32MB程度、仮想記憶という保険もなし。

となると、メモリ管理面でPCとは別の戦略が発生するのは必然って感じダスな。
ま、最近だと安易にmalloc使っちゃうけど(ぉ
170デフォルトの名無しさん:2001/02/26(月) 00:06
つーかクソコード話そうよ。
ゲーム専用機ネタは面白いけど、出来れば別スレッド誰か立てて
171デフォルトの名無しさん:2001/02/26(月) 00:23
自作のallocator、4種類ぐらい持ってる・・
C++とか使えば1つに統一できるのだが、ほとんど需要はCベースなので
172デフォルトの名無しさん:2001/02/26(月) 00:25
クソコード話が面白いとはおもいませんが>170
173164:2001/02/26(月) 00:27
いや、私もゲーム屋なんですよ、一応・・・
結局必要なのは計画的なmallocの使用であって、
mallocを全面禁止というわけではないですよね?
その際、自作mallocか出来合いのmallocかは
それほど関係ないと思ったのでした。
(自作のほうが挙動全て把握できるというのは了解です)
いや、なんかみんな「mallocつかうと虫食いになるからダメ」
って感じだったんで、そうじゃないでしょ、計画的に使えば
全然おっけーでしょ、って主張したかったのでした。

>>170
スレちがい失礼しました。
174170:2001/02/26(月) 00:29
>>172

そりゃたぶん、自分がクソコード書いてるからだよ。
クソコードは笑えるって。>>163とか面白い内容含んでるよ。
これ、たぶんコンパイラによって動作は不定なんじゃない?
175デフォルトの名無しさん:2001/02/26(月) 00:32
>>111
ってあれより簡単にわかりやすく書く方法ってあるの?
わからないので、どなたかヒマな方、教えてください。
176デフォルトの名無しさん:2001/02/26(月) 00:33
そりゃ、163のは言語未定義の構文だし。
面白味のかけらもありませんがぁ?>174
177デフォルトの名無しさん:2001/02/26(月) 00:36
>>176
言語未定義の構文って何?
コンパイルできるって事は構文上の定義を通ってるんじゃないの?
それとも163ってコンパイル出来ないの?
マジレスキボンヌ
178デフォルトの名無しさん:2001/02/26(月) 00:37
switchのbreakとforのcontinueをごっちゃにしてるので見にくいね。>111
状態遷移でやった方が保守が楽。
179デフォルトの名無しさん:2001/02/26(月) 00:37
>>176
ありゃ、俺も163は面白いと思ったけど。
名著「プログラミングの心理学」の作者とかが喜びそう。
糞コードって書いた人の気持ちを考えると面白いよ
180デフォルトの名無しさん:2001/02/26(月) 00:40
ああいう構文は、言語側の規約に無いので動作を保障しませんって事。>177
ANSI-Cの仕様書そのものか、P.J.プラウガーとか規格関係者の本に詳しく載ってるよ・・
181デフォルトの名無しさん:2001/02/26(月) 00:41
ぜんぜん面白くない・・
あんたどうかしてるよ。>178
182181:2001/02/26(月) 00:42
x>178
o>179
183デフォルトの名無しさん:2001/02/26(月) 00:44
174>>176

163みたいなコードを普通に書く?
こんな構文、思いつきもしないでしょ、普通は。
ビリヤードでも初心者の方が突飛もない狙い方をするように、
初心者の書くクソコードは理解を超えたことをしてくれて面白いと思うんだが、
まぁ現実主義者や実際に書いてる奴にはその面白さは理解できないよな。
184デフォルトの名無しさん:2001/02/26(月) 00:50
>>183
はあ?何がいいたいのか良く分からんが・・・。
おれはこれ以上関わらないことにするよ。
時間の無駄っぽいからなぁ
185デフォルトの名無しさん:2001/02/26(月) 04:00
c=c++;
これって c=c; と同じ?c++ の評価値が c だから。
そんな気がしたけど。
186デフォルトの名無しさん:2001/02/26(月) 04:09
cは評価された後、インクリメントされる。よって1増える。
187185:2001/02/26(月) 04:15
ども。
うーん。++ の評価ポイントって ; の後、でしたっけ?
= の後じゃなくて。
わかりづらいコードですねー。
188デフォルトの名無しさん:2001/02/26(月) 04:17
= の後→ = の前
189185:2001/02/26(月) 04:35
確認しまちた。int c = 0; c = c++;
gcc で 1, bcc で 1。(-O-,-O,-O2)
190名前ついてますか?:2001/02/26(月) 04:59
いや、だから動作は未定義だって...処理系依存。

すごく面白い糞コードはこの前見たんだけど、
関係者がみててばれるかもしれないのでいえない...
191デフォルトの名無しさん:2001/02/26(月) 05:33
未定義と処理系依存は違うので注意。
192185:2001/02/26(月) 06:43
>190
ういっす。こんなとこでしょうか。どこかの本の解説読みましたけど
'=' 演算子は部分式だからそれで副作用がでる順序は不定と。
間違ってたらツッコミお願いします。

でもこんなコード俺なら絶対かかねーっす(笑)

その解説↓
後置増分演算子などの式は副作用が保留されるが、次の評価順序点までに
達成される。構文で示される場合や、関数呼び出し演算子、&&, ||, ? :,
"," をのぞいて、部分式の評価順序、副作用が発生するところの順序は
不定である。
193185:2001/02/26(月) 07:01
あやや。ちょっとまって。
評価順序じゃなくて。評価順序点をみてみると

評価順序点 (sequence point)
実行順序において副作用が完了する点。次の時点は評価順序点である。
1)関数呼び出し時の実引数の式を評価した直後。2)&&, ||, ? :,
"," の左オペランド評価の直後。3)全式の終了直後。

ここで関係しそうなのは3の全式かな。

全式 (full expression) 他の式の一部でない式. 初期化式. 式文の式.
選択文や反復文の制御式, for の3つの式, return 文. 全式の終わりは
評価順序点.

ということで、 c = c++; は 評価順序点の * 順序 * は不定なんですが
評価順序点は ; の後にくるので c = c++ までは評価順序点がこないから
; の後で評価(全式)され、 c = 1 になる。(依存しない)
のではないでしょうか?
194185:2001/02/26(月) 07:04
でもなんかどうでもいいことですね。。会社いってきます。。
195デフォルトの名無しさん:2001/02/26(月) 08:03
163みたなコードが書けるCに乾杯ヽ(´ー`)ノ
196デフォルトの名無しさん:2001/02/26(月) 17:06
糞コード話が面白くないと思うなら、こんなスレッド見なきゃいいのに。
ゲーム機のメモリ確保関係の話は明らかにスレ違いだってわからないのか?
197デフォルトの名無しさん:2001/02/26(月) 17:56
char buf[50][1000];
 :
 :
for(j=0;fgets(buf[j],2000,fp)!=NULL;j++);

‥‥‥ヲイ
198デフォルトの名無しさん:2001/02/26(月) 18:13
sage
199デフォルトの名無しさん:2001/02/26(月) 19:31
(或る場所)
func(1);

(違う或る場所)
func(2);

(また違う或る場所)
func(3);


void func(int a){
  int stat;
  if (a == 1){
    ・・・
} else if (a == 2){
    ・・・
  } else {
    ・・・
  }
  return stat;
}

はぁ、頭痛い・・・
200デフォルトの名無しさん:2001/02/26(月) 19:38
関数定義がvoidなのにintを返せるの?
201デフォルトの名無しさん:2001/02/26(月) 19:40
>>199
そのコンパイラを捨てなさい。
202デフォルトの名無しさん:2001/02/26(月) 19:41
CWnd* pWnd;
pWnd->Create(...);

実体はどうした! そんなことで2時間も悩むな。
203デフォルトの名無しさん:2001/02/26(月) 20:05
if( xxxx = 1)
↑=が1個たんねーぞ。さらに困ったことに意図した通り動いてるぞ。
204デフォルトの名無しさん:2001/02/26(月) 21:46
199と203のコードを書いた奴って、どんなコンパイラを使ってんだ?
205デフォルトの名無しさん:2001/02/26(月) 21:53
>>203
意図した通りってalways trueが意図したとおりなのか?(笑)
206デフォルトの名無しさん:2001/02/26(月) 22:08
ていうか、コンパイラの警告レベル上げなさい。
207デフォルトの名無しさん:2001/02/26(月) 22:29
-Wall で、ゴー。
208デフォルトの名無しさん:2001/02/26(月) 22:47
>>202
staticメソッドそうやって呼ぶ人、たまにいなかったっけ?
普通はXXX::func()だろけど。
209デフォルトの名無しさん:2001/02/26(月) 23:30
new/deleteを自分で書くって、わかってないと危険だよね
ここに書いている人はわかっているとは思うけど、
サンプルコードを見てみたい気がする。
誰か自信のある人みせてくれない?
210デフォルトの名無しさん:2001/02/26(月) 23:37
>>208
そりゃ、うまくいくコンパイラもあるちゅーだけで
未定義の仕様でしょう。
211デフォルトの名無しさん:2001/02/26(月) 23:38
>>209
はぁ?
new/deleteの自信たっぷりなコードってどんなだ?(笑)
212デフォルトの名無しさん:2001/02/26(月) 23:42
>>211
明らかにアンタ厨房。煽りじゃないなら答えてやってもいいが、
operator new/deleteのコーディングが難しいのは常識。
213デフォルトの名無しさん:2001/02/26(月) 23:46
operator newの責任は、メモリアロケーションまでだけだよ。
そんなに難しいか?operator newカスタマイズなんて、
よくやることだよね?

普通の
new hoge;
なんていうのは、new演算子が内部でoperator newを呼び出してる
んだよね。コンストラクタ起動は別の場所でされるんだよーん。
なんかプログラマー版で変な論争繰り返してる人がいるみたいだけど、
そういうわけでoperator newはmalloc程度の実装でいいんだよん。
214デフォルトの名無しさん:2001/02/26(月) 23:52
責任問題で言えば、どんな書き方しても自分で責任さえとれればいいんじゃないの?
operator newに一般的に求められている事柄は、
1)new_handlerの定義
2)0バイトの要求を成功させる
3)メモリ不足時の無限ループ
4)内側のスコープでもnew宣言の成功
5)継承された場合への対処
などなど、一筋縄ではいかないというのは常識。
確かに212の言うとおり、211には厨房の兆しがあるね。
215デフォルトの名無しさん:2001/02/27(火) 01:18
>>199って、void型関数内でintをreturnしてるって所にフォーカスが
行ってるけど、1関数内に全く関係ない機能が複数実装されている
ってのが本質じゃないの?
216デフォルトの名無しさん:2001/02/27(火) 01:20
>>215
>1関数内に全く関係ない機能が複数実装されている

199からそれは読み取れないんじゃ?
217デフォルトの名無しさん:2001/02/27(火) 14:10
199はフラグ変数やモード変数での分岐がやたらに存在する、
「勘違いした共通化」の例ですよね。経験の長いプログラマのコード
でも、結構よくみるやつですね。
218デフォルトの名無しさん:2001/02/27(火) 15:52

&a hoge()
{
a fuga;
...
return fuga;
}

219デフォルトの名無しさん:2001/02/27(火) 16:35
ORACLE+PRO*C開発環境にて
仕様「マスターAをトランザクションBでマッチングしながらアップデート
想定ステップ数200・想定工数3日」
2.5日寝てていいですか?ステップ数200をどうクリアしようかなぁ
220>>212,214:2001/02/27(火) 17:16
え〜operator new/deleteの詳しい定義知らないと厨房ですか?
結構難しいと思いますよ。普通本にも書いてないし、
言語の仕様書を読むくらいの勢いじゃないと覚えられないでしょう。

ねぇ?
221デフォルトの名無しさん:2001/02/27(火) 17:30
> 3)メモリ不足時の無限ループ
メモリ不足の場合は、throw bad_alloc();じゃなかったけ?

#VC++はこの辺の実装がぬけているけど。
222220:2001/02/27(火) 17:38
>>221
いや、それはメモリが最終的に確保できなかった場合です。
newはメモリの割り当てが成功するまで、永久にループを繰り返します。
その中で毎回new_handlerをよんで、そのnew_handlerが
・どこか別の部分のメモリを解放してくれる
・例外を投げてくれる
・別のnew_handlerを設定してくれる
のを期待するのが正しい仕様です。
new_handlerが設定されていなければstd::bad_allocを投げます。

だから、new_handlerでプールの一部解放とか
やったりすることが出来て、仕様通りなら色々楽しいことが出来ます。

しかし仕様通り作ってる人がほとんどいないのは211、213をみても
よくわかりますけれど、こればっかりは仕方ないですね。
223221:2001/02/27(火) 17:45
>>222
勉強になりました。
224デフォルトの名無しさん:2001/02/27(火) 19:16
>1
とある自称VBプログラマーのソース(標準モジュール)の冒頭

Dim a as Integer
Dim b as Integer
Dim c as String
Dim d as Integer
Dim e as Integer
Dim a2 as Integer
Dim b2 as Integer
Dim c2 as Integer
Dim d2 as Integer
Dim e2 as Long

Type data
aa as Integer
bb as String
cc as String
End Type

Type data2
aa2 as Integer
bb2 as String
cc2 as Boolean
dd as data1
End Type


こんな調子で変数名つけてく上にコメント一切なしだから、バグでまくって
結局別の人間が1から作りなおしました。
225デフォルトの名無しさん:2001/02/27(火) 19:22
話しを糞コードに戻して
今までに遭遇したなかで一番凶悪な糞コード

 #define int short

なんでコンパイル単位毎にintのサイズが変わるのか
わけがわからなかった。これを見つけた時には愕然としました。
犯人はダメダメ先輩でした。

番外編。コードではないが、
某外注さんからソースをもらって、調べていたが
#includeしているヘッダファイルがどこを探しても見つからない。
そしたらHidden属性にしていやがった。
発注元に対する嫌がらせかとおもった。
226デフォルトの名無しさん:2001/02/27(火) 22:18
見えるようにしとけ。。。>225
227デフォルトの名無しさん:2001/02/28(水) 15:28
よく見掛けるコード

if( a == 1 ) {
continue;
} else if( a == 2 ) {
continue;
} else {
if( a >= 3 ) break;
}

仕様書の通りに書いてるのか、はたまたバカなのか、こういう人は意外と多い。
228デフォルトの名無しさん:2001/02/28(水) 15:59
>>227
よくわかんないですけど
それって1つめのifとelse ifは不要で

while ...
if ( a >= 3 ) break;

だけで十分ってことですよね?
229>225:2001/02/28(水) 16:25
16bitコードからの移植ではたまにやる。
つーかintのビット長を16に仮定してある
コードを見た日にゃあそうするしかあるまい
230デフォルトの名無しさん:2001/02/28(水) 16:35
>>229
typedef short int16;
あとはエディタの置換でがんばれ。
231227:2001/02/28(水) 17:16
>>228
そう。
ループ開始〜終了は書かなかったけど意味はわかるでしょ?
更にクソな人で、

if( a == 1 ) {
break;

b=3;
a=0;
}

とか書く人もたまにいる。これで3日ぐらい意味不明のバグが!って悩んでた後輩もいた。
232デフォルトの名無しさん:2001/03/01(木) 14:02
あれ? これって

>} else {
>if( a >= 3 ) break;
>}

この後に何かコードがあるんじゃないの?
だったら、

>while ...
>if ( a >= 3 ) break;

これだとaが1or2の場合そのコードが実行されてしまうよね?
それっておかしくないですか?
233デフォルトの名無しさん:2001/03/02(金) 00:52
詳細は忘れたけど、昔某ファームウェアで見たソースで確かこんな感じ。
#define BUFFERSIZE 1024
定義子に2バイトコード使ってるのみたことあるんですが、これって
普通なんですか?
234デフォルトの名無しさん:2001/03/02(金) 01:19
コンパイラ通るっけ?
少なくともVCははじく。
235233:2001/03/02(金) 01:44
>>234
プラットホームがUNIXだったから…(コンパイラは忘れた)

あとこんな感じのコードもありました。

#define hogehoge? 100

?使うなよ…。
(VCは通らないと思うけど、UNIX開発環境のコンパイルは通った)
236捨てファン:2001/03/02(金) 14:37
>>49
古い話題だけど

int i;
int func[]() ={ func1, func2, func3, func4 };

for( i=0 ; i< (sizeof(func)/sizeof(func[0])) ; i++ ){
if( !func[i] ){
/* エラー処理 */
}

これでいいじゃん。
呼び出す関数が増えれば配列に関数のポインタ加えるだけ。
237デフォルトの名無しさん:2001/03/02(金) 14:58
>>236
> int func[]() ={ func1, func2, func3, func4 };
int (*func[])() ={ func1, func2, func3, func4 };

> if( !func[i] ){
if( !func[i]() ){
func[i]とfunc[i]()は意味が全然違うぞ
238捨てファン:2001/03/02(金) 16:27
>>237
すまんさんきゅ
239デフォルトの名無しさん:2001/03/03(土) 03:25
実は自分で書いて怒られた

malloc(0)
240デフォルトの名無しさん:2001/03/03(土) 23:41
今やってるサイエンスアイのホンダのロボットの特集……
見てると明らかに糞コードがあったな。
case xxx:とstrcpyの嵐が数秒間スクロールしていったぞ。
241デフォルトの名無しさん:2001/03/04(日) 02:22
>>236
引数が全部同じでいいときだけな...
242デフォルトの名無しさん:2001/03/04(日) 03:02
>>240
case 867: とか見えたよ。トホホ。
243デフォルトの名無しさん:2001/03/04(日) 03:21
>>241
引数が違う場合はどう実装するんだろう。
すべての関数を可変個引数として実装して、
自前で関数を呼び出すとか。あ〜環境依存するか。
環境依存させないためにはvoid **を利用すればいいのかな
それとも可変個引数を別の関数に渡す方法ってあったっけ?

……以上トリッキーの1でした、失礼
244デフォルトの名無しさん:2001/03/04(日) 06:04
Cなら引数省略()で宣言してれば普通に可変個扱えるけど?>243
その場合引数はint型の大きさでスタックに積まれる筈。
コンパイラが型チェック省略するので。
でも危険だから確実に2個受け取る場合は2こ処理させる事。
昔のソースの関数テーブルは可変個引数使ってる例が多い。
245デフォルトの名無しさん:2001/03/04(日) 12:23
ちょっと本題からずれているのでsage

>>244
引数がintの大きさで……って事は、要するに
インラインアセンブルなどでpush/callせよと言う事?
仮にそうだとすればx86系では動いてもalphaでは動かなくなるのでは?
そうでないなら詳しい話キボンヌ
246デフォルトの名無しさん:2001/03/04(日) 12:56
引数のスタックに積まれる順番は決まってなかった気もするが。
(引数の評価順が規定されていないのは間違いないけど)

int main(void)
{
  void test();

  test(0);
  test(1, 2);
  test(3, 1, 2, 3);
  test(2, 'a', -1);
  return 0;
}

void test(int nparam)
{
  int i;

  printf("Extra Parameter %d: ", nparam);
  for (i = 0; i < nparam; i++) {
    printf(" %d", *(&nparam + i+1));
  }
  printf("\n");
}
247デフォルトの名無しさん:2001/03/04(日) 13:32
>>246
呼び出し規約はベンダー依存だったはずですね。
やっぱり可変個引数をそのまま他に投げることは
一般的には難しいんでしょう。vprintfの様なマクロを用意するのがベストでしょう。
248デフォルトの名無しさん:2001/03/04(日) 13:35
なにやら難しい話題が続いていますが、糞コードネタをちょっと。

char* p="abcdefg";

while(*p)
  ++*p++;

これは糞コードに分類されますか?
俺の勘だとぎりぎりアウトだと……
249デフォルトの名無しさん:2001/03/04(日) 13:57
>242
制御やってる人ってcaseを並べることが多いよな。
あと、MFCを無理矢理Cで使った上、変数は全てグローバル。
俺はそのコードをいじることになって、本当に涙が出てきそうだった。
250デフォルトの名無しさん:2001/03/04(日) 15:39
>>248
それは糞じゃなくて、トリッキーの方だと思うな。
糞プログラマーにそのコードは書けない。
しかし、そのコードを各プログラマーがいいプログラマーと言うわけでもない
251250:2001/03/04(日) 15:42
って、しまった。
248のコード、文字列リテラル中身書き換えてるじゃん。
俺もバカバカ
252デフォルトの名無しさん:2001/03/04(日) 17:15
やっぱアシモとかも力技で動かしてるんだろうなあと悟って
かな〜り幻滅したッス。
253デフォルトの名無しさん:2001/03/04(日) 23:36
動くことに意義がある
254デフォルトの名無しさん:2001/03/05(月) 00:18
プログラムは作った通りに動くとかいう名言あったよね
ド忘れしてちゃんと思い出せないのでキボーン
255トリッキーの1:2001/03/05(月) 00:20
>>252
チームには色々な人材がいるだろうから、
悲しい結果になるのもわからないではないなぁ。

「プログラミングの心理学」にあるような
理想的なチーム運営が出来ればそのようなことも無くなると思うけれど、
それはかなり難しいのでしょう。

それでも253さんが言うように、最終的に動くところまで
こぎ着けているんだから、チームとしては成功だと思いますが。

とりあえず俺は、自分がそういうコードを書かないように気を付けよう。
256デフォルトの名無しさん:2001/03/05(月) 20:11
>>240
>>242
caseを減らすだけでかなり高速化するんではないのか??
case867なんて・・・

strcpy... ホンダも所詮その程度の会社か
アトムまであと72年はかかるな
257デフォルトの名無しさん:2001/03/05(月) 22:38
case は順番に書こうね。
258デフォルトの名無しさん:2001/03/06(火) 12:22
caseの値で「予定値」まで最初から書くのはやめようね。
最低でも、納品版では使ってない行は消しておくれ
259デフォルトの名無しさん:2001/03/06(火) 15:31
switch(xxx)
  case 1:
    処理A
  case 2:
    処理B
    break

意図的にcase1にbreakがないのやめれ
260デフォルトの名無しさん:2001/03/06(火) 15:57
>>259
俺、思いっきりそれやるんだけど(笑
例えば
char *pa;
char *pb;
char *pc;
try{
 pa = (char*)malloc(〜);
 if( !pa )throw(1);
 ・・・処理・・・
 pb = (char*)malloc(〜);
 if( !pb )throw(2);
 ・・・処理・・・
 pc = (char*)malloc(〜);
 if( !pc )throw(3);
}catch(int n){
 switch(n){
   case 3:free(pc);
   case 2:free(pb);
   case 1:free(pa);
   default:break;
 }
}
こんな感じ。
メモリの解放はデストラクタにやらせろと言われそうだけど、
あくまで例なので、その辺は勘弁を(藁
261デフォルトの名無しさん:2001/03/06(火) 16:10
>>260
no breakは一般的だというのには同意。
もっとも俺は必ずコメント/* no break */をつけるけど。

ただ、例のプログラム程度ならstd::auto_ptrを使うのが常識
ま、当然ただの例だとおもうけどね。no breakのプログラムって
例が難しそう。そういう点では260のコードは素晴らしいな。
262デフォルトの名無しさん:2001/03/06(火) 16:53
>caseを減らすだけでかなり高速化するんではないのか??

なるか、バカ!
263デフォルトの名無しさん:2001/03/06(火) 16:55
えーっ、
switch(xxx)
  case 1:
    処理A
    /* fall through */
  case 2:
    処理B
    break
コレでしょやっぱ。
264デフォルトの名無しさん:2001/03/06(火) 19:44
int main(int argc, char*argv[] )
{
  switch( argc ){
  case 3:
   //2つめの引数の処理
  case 2:
   //1つめの引数の処理
   break;
  default:
   puts("usage");
   break;
  }
}
便利だよね。
265デフォルトの名無しさん:2001/03/06(火) 20:50
>>262
caseを減らしてifで最適化したコードを書くほうが早くなるんじゃないのか?
266void init():2001/03/06(火) 21:34
case話ついでにひとつ。

switch(xxx) {
case xxx:
...
break;
casexxx:
...
break;
};

2番目のcaseがラベル扱いになり、処理されませんでしたとさ。
267デフォルトの名無しさん:2001/03/06(火) 23:25
ふつーエディタの色分けでそんなミスしない。>266
メモ帳ならわからんでもないが
268デフォルトの名無しさん:2001/03/06(火) 23:40
>265
アホ発見!
と言った所か。
269void init():2001/03/06(火) 23:46
>>267
あ、昔の話です。
最近は色分けされるから、コーディングしやすくなりましたね。
どんなターゲットでもVCのエディタを使ってます。

270デフォルトの名無しさん:2001/03/07(水) 01:07
>268
そんなところだ。
271名無しさん@Emacs:2001/03/07(水) 02:52
今いじってる糞コード。

複数のディレクトリを変数に格納するのに、ディレクトリ間に
デリミタを入れたリニアな char * を使ってる。

char *dirs = "/home/hoge^/home/fuga^/home/mona"

という感じ。ディレクトリ名に「^」が含まれる時はそこだけ
「^^」にしてエスケープしてる。
なぜ素直に char ** を使わない!?
272名無しさん@Emacs:2001/03/07(水) 02:56
もういっちょ。

やたらとグローバル変数を使ってる。
まあ、それだけなら別にどうということもないが
その名前と内容が問題。

int temp_fd とか char *temp_ptr とか。
たのむからテンポラリ変数をグローバルで定義しないでくれ(T_T)


他にも

if (条件) {
} else {
hoge;
}

とかやってるし。なんで if (!条件) にしないんだ!
273名無しさん@Emacs:2001/03/07(水) 02:59
まだあるぞ。

errno をマジックナンバと比較してる。
(errno == ENOENT) じゃなくて (errno == 2) になってる。
これは大丈夫なのか?

他にも、int を返す関数で常に一定値が返ってる (意味ねぇよ)
とかもあるな。
274トリッキーの1:2001/03/07(水) 04:11
>>271
>char *dirs = "/home/hoge^/home/fuga^/home/mona"
>なぜ素直に char ** を使わない!?
それ以前にデミリタに'\0'を使えば、
少なくともエスケープの問題は回避されるはずだしね(笑)

>>273
intで一定値を返すのは、拡張性があるとも言えます。
将来エラーコードを返すかもしれないぞ、という主張の場合が多いです。
int main()で常に0を返す場合って良くあるのに、
void main()が(本来は)仕様で定義されていないのと同じですね。

もっとも今回の場合はさすがに「それはない」と言えますが(笑)
275デフォルトの名無しさん:2001/03/07(水) 07:07
>>272 if (条件) else { hoge; }
たまにやってる人いるね。
後で、両方の処理をかくことを想定しているらしい。

276デフォルトの名無しさん:2001/03/07(水) 09:58
>>272
あーごめん。俺たまにやるわそれ。
理由はほぼ>>275
でもって、たいていやらないでほったらかしにするんだな(ぉぃ
ちなみに、当然(!条件)もつかっとります。
277デフォルトの名無しさん:2001/03/07(水) 11:20
某ファーム系の仕事で、
switch(code){
code CODE_A: …; break;
code CODE_B: …; break;
code CODE_C: …; break;
<中略>
}
のように、codeにより処理を変えて行うというロジックがあった。
(CODE_A、CODE_Bはあまり気にしないで)

で、後から「状態(status)が0だったら、CODE_Bの処理はしないで」
という仕変があって、その後、彼が書いた糞コード。

if(status!=0){
switch(code){
code CODE_A: …; break;
code CODE_B: …; break;
code CODE_C: …; break;
<中略>
}
} else {
switch(code){
code CODE_A: …; break;
code CODE_C: …; break;
<中略>
}
}

おいおい
278デフォルトの名無しさん:2001/03/07(水) 12:01
>>277
こうやって糞コード+長い関数が日々量産されていくのか...
279名無し~3.EXE:2001/03/07(水) 12:10
case 867: とか出てきたのって、
コンパイラコンパイラが出したんでないかい?
状態遷移をなんかで表現しといてそれをCのコードに変換するようなのを
作ってたとしても不思議じゃないし、作っていそうなもんだ。
その出力なら人間が見てもよーわからんコードになるから
TVに映されてもOKということで。
280271:2001/03/07(水) 14:01
>>274
>それ以前にデミリタに'\0'を使えば、

それだといくつのディレクトリが格納されてるのかわからんようになるぜ。
ディレクトリの個数を別の変数に保存しとかにゃいかん。
str* 系の関数が非常に使いにくくなっちゃうし、それはちょっとトリッキー。
あ、だから「トリッキーの1」なわけか(笑)
281トリッキーの1:2001/03/07(水) 14:05
>>280
最後はデミリタ2つ繋げでしょう。\0\0という風に。
コードが書きやすかったので昔よく使ったんだけど、
今や方法はいくらでもあるなぁ。

\0の方がstr*系の関数を使いやすいと思ったけれどどうかな?
例えばchar *dirs = "/home/hoge^/home/fuga^/home/mona";
の場合、ディレクトリ毎に取り出すのにstrcpyを使えないし。
282280:2001/03/07(水) 14:26
>>281
おお、なるほど。それならたしかにうまくいくな。

>\0の方がstr*系の関数を使いやすいと思ったけれどどうかな?
スマソ。書き方が悪かった。
char * に \0 デリミタを使って格納する場合は、char ** を使う場合に
比べて str* 系関数が使いにくい、という意味でした。
後者なら strdup(dirs[1]) とかできるけど、前者だと 2 つ目以降の
ディレクトリを参照するにはポインタをいちいち移動させにゃ
いかんよね。まあ 2 つ目は strdup(dirs + strlen(dirs) +1) でいけるけど。
283デフォルトの名無しさん:2001/03/07(水) 16:49
>>277
似たような経験はあるな。その時の変更者のコメント。

「既に動いているロジックを変に組みかえると、関連するすべてを
 テストしなおさなければならないだろう?
 そういう苦労を考えたら、動作が保証されている部分は残しておき、
 新たなコードを加えるようにすることで、追加した部分だけのテストで
 済んで効率的じゃないか」

じゃあ、switchの前に if(statue!=0) と加えたことによる、既存部分への
分岐による変更はテストしないでいいのか・・・と聞いたら

 「switchの中はいじってないだろう」

と言われたわ。

※話は >>277 のソースコードに合わせて変えてますが
  話の流れはこんなもんです
284デフォルトの名無しさん:2001/03/07(水) 21:45
グローバル変数で
int a;
int aa;
int aaa;
int aaa...;
…頼むから辞めてくれ(藁
285いつでもどこでも名無しさん:2001/03/07(水) 21:47
>284
グローバル変数でなくても痛そうな気がする・・・。
286デフォルトの名無しさん:2001/03/07(水) 21:55
>>284
そして、そのaは
あるところではループカウンタに
あるところではフラグに
あるところではスイッチに
あるところではステータスに
なるのであった・・・
287ナナシサソ:2001/03/07(水) 22:45
>286
そのaってのはハフマン符号木に対応してるんだろ。
どっかにbがあったりして。(藁
288デフォルトの名無しさん:2001/03/07(水) 23:29
>>286
いやすぎ(w
289デフォルトの名無しさん:2001/03/08(木) 12:07
自分もグローバルに int i ;を発見。文句じみたことをいったら
「もし関数内部で変数iを動的に定義するなら、そっちが優先されるから平気だよ」
などとひらきなおられてしまいました。生兵法怪我の元とはよくいったもんだ
290デフォルトの名無しさん:2001/03/08(木) 12:12
>>284
どこにでもいるんだな・・・そういう奴

>>289
どこにでもいるんだな・・・そういう奴

ちなみに俺んとこでは、同じ言い訳をしておきながら、
その関数に与えた引数変数名iをにして関数内でグローバル参照したつもりで
バグりまくって悩んでたような記憶がある

俺じゃないぞ
291デフォルトの名無しさん:2001/03/08(木) 12:31
いやでも、組み込みならやる事あるぞ
その方が短いコード出す場合があるのと、
メモリダンプでカウンタの値が見易いから
292デフォルトの名無しさん:2001/03/09(金) 23:23
組み込みって、最近は携帯電話でもメモリがんがん使うのが流れじゃないの?
(聞いた話だけど)
293デフォルトの名無しさん:2001/03/10(土) 00:56
逝って良し>292
294デフォルトの名無しさん:2001/03/10(土) 15:41
>292
そういう携帯が自主回収される
295ななしさん:2001/03/10(土) 23:35
char* p,q;
296デフォルトの名無しさん:2001/03/10(土) 23:53
>>295
char*型のpにchar型のqでしょ。
全然問題ありませんが?
混乱するっていうならtypedefでもすれば?
それと「char*」という風にくっつけて書くのはどうかと思いますが。
(C++使いの方はなぜかこう書きますね。アホですか?)
297ななしさん:2001/03/10(土) 23:55
>>296

いや、まさに記述法の問題を言いたかったのですよ。くっつけて
かいていることね。

一瞬、p と q がポインタかと思った。すぐ気づいたけどさ。
298デフォルトの名無しさん:2001/03/10(土) 23:57
VBで、
dim i, j as integer
とかやると、i はバリアントになっちゃう、とかいうのなかったっけ。
最近VBいじってないから間違ってたらごめそ。
299名無しさん@お腹いっぱい。:2001/03/11(日) 00:00
>>296
>(C++使いの方はなぜかこう書きますね。アホですか?)
 知ってて言ってると思うけどC++の教科書にはそういう書き方
 を推奨しているものがあるから。
300296:2001/03/11(日) 00:01
こういうときはtypedefを使った方が良いですね。
ハンガリアン記法が嫌いな人でも型名に対しては以外と寛容でしょう。
#ifndef FAR
#ifdef __MSDOS__
#define FAR far
#else
#define far
#endif
typedef char char_t;
typedef char_t *pchar_t;
typedef char_t FAR *lpchar_t;
typedef unsigned char byte_t;
typedef byte_t *pbyte_t;
typedef byte_t FAR *lpbyte_t;
など
301デフォルトの名無しさん:2001/03/11(日) 00:02
>>296
typedefの代わりにdefine使ってハマる奴とかいないかな。
おいらは見たことないけど。

#define PCHAR char *

PCHAR p, q;
302296:2001/03/11(日) 00:03
>>298
現在VBはやってませんが、
最後にas integerで括ってるからi,jともintegerになるはずですが?
そうでなかったらイヤすぎ・・
303296:2001/03/11(日) 00:05
>>296
あ、FARのマクロ定義間違ってる・・まあいいか。
304296:2001/03/11(日) 00:10
>>299
なんで推奨されてるかって理由は知ってます?
わたしは覚えてません・・
こんな書き方を問題にするならtypedef使えよっていつも思うもので・・
305トリッキーの1:2001/03/11(日) 00:20
>>304
推奨される理由、是非知りたいですね。

私は結構char* xという書き方をする人です。
引数ではまず間違いなくfunc(char* arg1)と書きますね。
あと、私は標準以上にコメントを書く人種で、
char* vary; // some temporary variable
などと書くので、1行に2つ以上宣言する事が少ないです。

と言い訳してみたけれど、やはりコンパイルエラーを誘発しそうですね。
個人的な感性として、char*型という書き方が気に入っているだけです。
306デフォルトの名無しさん:2001/03/11(日) 00:53
Stroustrup大先生の趣味ということで決着がついたのでわ。
307デフォルトの名無しさん:2001/03/11(日) 01:04
>>302

ならないよ。VB7なら、それでもいいんだけど。
308302:2001/03/11(日) 02:03
VB7のことを言ってるんですが?
そんなこともわからないとは鬱すぎ・・・
309ホンモノの302(=296):2001/03/11(日) 02:47
あんただれ?>308
所で、わたしはサッパリですVBは。触わってたのってVer.2〜4の頃なので。
同じ宣言形式のPascalだとどうだったかな。
310ホンモノの302(=296):2001/03/11(日) 02:51
げえ、個人の趣味だったんですか>306
言語製作者とはいえ・・
311デフォルトの名無しさん:2001/03/11(日) 03:19
c との互換性をとったんじゃないの..?
c++でcのソースがコンパイルできないっていうのはアレだし
312311:2001/03/11(日) 03:23
あ かなりボケてた もう寝る..
313デフォルトの名無しさん:2001/03/11(日) 05:52
char *xねぇ。
Cやりたてのころはもこんな風に書いてあった資料ばかり。
おかげでポインタ理解できなくて、Pascalいじってからようやく理解できたよ。
それいらい、typedefしてchar* xみたいにしてる。
314デフォルトの名無しさん:2001/03/11(日) 07:17
>>313
char* xと書いた方が、型として認識しやすいですもんね。はじめの頃は。
やっぱchar *xは、初学者にとって混乱の元だと思います。
つまりchar_pointer xがchar pointer_xみたいな認識になるんじゃないかと。

なれりゃどうでもいいやね。実際最近は意識したことないし、
自分の書いたコードみると、両方いり混じってるし(´Д`;
315313:2001/03/11(日) 18:30
>>314
>char pointer_x
まあ、そのとおりやね。
PascalにPointer型や
 type PByte = ^Byte;
 var p: PByte;
みたいな宣言があって一発でピンときたっていうかー、
あーそういうことだったのね、みたいな。

とは言え、最近は大分慣れたyo
厨房なカキコでスマソ(藁
316デフォルトの名無しさん:2001/03/12(月) 12:35
>>307
VB7でその手の判断が変わるとなると、
糞コードな職場のソースは互換性がなくなることになるのか?
317デフォルトの名無しさん:2001/03/12(月) 12:36
>>314
わしは職場では char *x と後につけるように習ったけどな・・・
318デフォルトの名無しさん:2001/03/12(月) 12:48
変数定義を1行に複数個書くのは糞コード
と煽ってみる
319こんなやつ?:2001/03/12(月) 13:16
int hoge; int moge; int poo;

と煽り返してみる
320ついでなんで:2001/03/12(月) 13:17
条件式内で代入するのは糞コード

と煽ってみる
321デフォルトの名無しさん:2001/03/12(月) 14:20
char *a;
は、*aがchar型になっているとかそんな理由だったようなきがする。
で、C++になって参照がでてきたときに、
char &a;
じゃ、なんか気持ち悪い、やっぱ、
char& a;
だろう。ってなことになったが、じゃあ
ポインタへの参照はどうなるの?やっぱ
char*& a;
だろう。ってなことになり、面倒なので、全部左側にくっつけちまえって
ことになったんじゃなかったっけかな。
322デフォルトの名無しさん:2001/03/12(月) 16:16
そういや、最初の職場では char aでなく、必ず[]を付けて
char a[1];
char buf[3];

のように書き、初期化でも
memset( a, 0x00, 1 );

じゃなくて
memset( &a[0], 0x00, sizeof(a) );

と書けといわれたことがある。これってナンセンス?常識?
323デフォルトの名無しさん:2001/03/12(月) 16:26
>>322
それってchar *a;と何の関係があるんだ?
ま。常識かと聞かれれば非常識ですね
324デフォルトの名無しさん:2001/03/12(月) 16:31
>>322
 スマン、メリットが思い浮かばないんだが何のためにそんなことするの?
325デフォルトの名無しさん:2001/03/12(月) 17:24
>>324
リークのチェックが目的じゃないか?
326デフォルトの名無しさん:2001/03/12(月) 17:27
ポインタかどうか明示的に書いてるだけじゃねーの?
見たことはねーな。

>>322
おもろいやつ発見。ここはポインタの話をするスレだったのか。
じゃあキミも余計なコメントやめてポインタの話だけしなさい。
327デフォルトの名無しさん:2001/03/12(月) 17:32
レジスタに割り当てられたくなかったとか?
328デフォルトの名無しさん:2001/03/12(月) 19:07
COBOL出身プログラマが桁数(バイト数の意)を数えられないからだと見た。
329デフォルトの名無しさん:2001/03/12(月) 19:26
struct foo1 {
  int a1;
  int b1;
  // :
};

struct foo2 {
  int a2;
  int b2;
  // :
};

struct foo3 {
  int a3;
  int b3;
  // :
};

// おんなじのが続く
// :

struct hoge {
  struct foo1 f1;
  struct foo2 f2;
  struct foo3 f3;
  // 続く
};
330デフォルトの名無しさん:2001/03/12(月) 19:45
>>329 いったい何をするコードなんだろう...
331デフォルトの名無しさん:2001/03/12(月) 20:14
同じ内容の構造体をやたらと複数定義してるってことかな?
それとも、今ごろstructしたらいっしょにtypedefもしとくぜってことかな?
332デフォルトの名無しさん:2001/03/12(月) 20:55
>>330
僕は複数定義だと思う
333332:2001/03/12(月) 20:56
う、前のレス、
>>331 だった
付かれてるのかな

ウツダシノウ
334デフォルトの名無しさん:2001/03/12(月) 20:57
同じ内容といえば、一度使った変数は使えないと思い込んでた自称C得意のお馬鹿さんが
”引数を渡して、その引数をファイル名と見なして先頭〜バイトが〜なら指定の場所にバックアップ”
だけの処理で、グローバル変数80個ぐらい使ってて爆笑させてもらったことがある
335334:2001/03/12(月) 21:02
雰囲気としてはこんな感じね

int ia, ib, ic, id, ie, ii, ik;

int head_check( int );

main( int argc, char *argv[] )
{
ia = argc;
if( ia == 1 ) {
ib = ia;
ib = ib+1;
ii = head_check( ib );

for( ik = ii; ik < 5; ik++ )
{
....
}
}

int head_check( int ta )
int tb, tc;

ic = ta;
if( ic == 3 ) {
id = ic;
id = id + 2;
tb = id;
return( tb );
}
else {
ie = ic;
ie = ie - 1;
tc = ie;
return( tc );
}
{
}
336334:2001/03/12(月) 21:04
見た時、かなり高度なことでもやってるのかと疑いを持ってしまいそうに
なったよ、この38歳のおっさんに。今までどうしてたのか聞いたら
「ずっとCOBOL,最近Cを勉強している」とのこと。
参考までに見せてもらったCOBOLのソースもムゴかった。
337329:2001/03/12(月) 23:23
失敬。>>332さんの通りです。
338デフォルトの名無しさん:2001/03/13(火) 04:10
#define ZERO 0
339デフォルトの名無しさん:2001/03/13(火) 04:58
>>334
けど、今時のコンパイラなら、最適化して大きな差はでなくなっちゃうんじゃないかな?
340デフォルトの名無しさん:2001/03/13(火) 05:37
最適化以前に335のようなソースは労働時間の無駄ですね
341デフォルトの名無しさん:2001/03/13(火) 10:15
>>329
もしかして単にintの二次配列?
342329:2001/03/13(火) 11:51
*この場合は*二次配列じゃないです。でもやりかねない。
343デフォルトの名無しさん :2001/03/13(火) 11:58
>>338さんが言ってる事やってるのってイタイの?
くそ?だめ?ごみ?

いや、おれの会社のコードに書いてあったから・・・・・
344デフォルトの名無しさん:2001/03/13(火) 12:08
switch(type){
case A:
  処理A;
  break;
case B:
  処理A;
  break;
case C:
  処理A;
  break;
case D:
  処理A;
  break;
case E:
  処理B;
  break;
default:
  処理A;
  break;
}
345デフォルトの名無しさん:2001/03/13(火) 12:23
int done = false;
while(done == false){
  ...
  done = func();
}
if(done == true+1){
  ...
}else if(done == true){
  ...
}
346デフォルトの名無しさん:2001/03/13(火) 12:47
1日前の日付を獲得するのを、わざわざOracleのDDL呼び出しでやってた
347デフォルトの名無しさん:2001/03/13(火) 12:49
>>343
> >>338さんが言ってる事やってるのってイタイの?
> くそ?だめ?ごみ?
yes! 定数名は意味を書くべきであって、値を書くべきではない。

348     :2001/03/13(火) 13:07
>>345
switch文つかわなくてもいいじゃん
349デフォルトの名無しさん:2001/03/13(火) 13:10
留学で会社辞めた部下がこっそり残していたコード。
#VBね

Select Case tbName
Case "course.csv", "COURSE.csv"
tbName = "COURSE"

Case "module.csv", "MODULE.csv"
tbName = "MODULE"

Case "lesson.csv", "LESSON.csv"
tbName = "LESSON"

Case "list.csv", "LIST.csv"
tbName = "LIST"

Case "item.csv", "ITEM.csv"
tbName = "ITEM"

Case "engineitem.csv", "Engineitem.csv", "EngineItem.csv", "ENGINEITEM.CSV"
tbName = "ENGINEITEM"

Case "schedule.csv", "Schedule.csv", "SCHEDULE.CSV"
tbName = "SCHEDULE"

Case Else
MsgBox LoadResString(InvalidTableError), vbCritical
SetConnCSV = False
End Select

。。。もうお前はコード書くな。
2年書いてこんなクソだったら一生何やっても無駄。
toupperとかlower使えっつーの。
350デフォルトの名無しさん:2001/03/13(火) 13:12
>>347
#define ZERO '0'
#define ZERO "0"
#define ZERO 0
#define ZERO 0.0
など考えられるんだからいいんじゃない?


351デフォルトの名無しさん:2001/03/13(火) 14:23
>>350
だからこそダメなのでは?
352デフォルトの名無しさん:2001/03/13(火) 15:25
VB5にて

sub form_load()

if a = 3 then
goto NEXTDATA
end if

if a = 2 then
gosub NEXTDATA2
end if

end sub

といった感じで、メソッド一切なし、ずっとgotoとgosub。
解析しんどかった・・・

353デフォルトの名無しさん:2001/03/13(火) 15:26
あと、全部の行に行番号が振ってあった。
354デフォルトの名無しさん:2001/03/13(火) 15:41
>>353
N88BASICと呼ばれていた頃のソースを引き継いだならあきらめろ
N88BASICの頃からのPGが新規に作成したソースなら止めさせろ(又は辞めさせろ)
355352=353:2001/03/13(火) 18:56
>>354
違う。VBで1から書いたソースだった。
で、その人はとっくにクビになってる。

俺がその会社に派遣されて1ヶ月で消えていった。
しかも最終日、出ていく前「お世話になりました」ではなく全員を
涙目で睨んで「ううっ!」とか叫びながら出てった(藁
356352=353:2001/03/13(火) 18:57
そして、その会社の女性社員二名にだけ後で
 「あの時は悲しさのあまり何もいえなかったけどありがとう。
  今度一緒に食事にでもいこうね」
とメール打ってきて大爆笑でした。38歳ぐらいの独身さんだったはず
357デフォルトの名無しさん:2001/03/13(火) 19:08
>>350
そういえばこんなのも。

#define HOGE_0000 0
#define HOGE_0001 1
...
#define HOGE_0007 7
...

なんのつもりだ。
358デフォルトの名無しさん:2001/03/13(火) 19:41
>>357
コード中に定数を使っちゃだめです。っていうコーディング規約を勘違いして
こーゆーことする人、よくいますね
359デフォルトの名無しさん:2001/03/14(水) 00:42
>>358
それだけならばまだいいが(?)、
修正する時に
#define HOGE_0007 8
なんてしちゃう奴...
(って話が『プログラム書法』にあったっけ)
360デフォルトの名無しさん:2001/03/14(水) 12:36
クソコードかどうか分からんけど、俺の価値観からするとクソ
(以下の命名方とかのツッコミ無しね、スマソ)
typedef enum{
CODE1,
CODE2,
CODE3,
CODE4
} TCODE;


TCODE code;
if( (code!=CODE1) && (code!=CODE2) && (code!=CODE3) ){
//目的の処理。
}

否定的な正確が表れているなーと思った。
361360:2001/03/14(水) 12:37
↑あっ、codeの中身は何かの処理でセットされてるよ。
 グローバル変数じゃないよ。
 (言わなくても分かると思うけど)

あと、「正確」→「性格」でした。ごめんなさい。
362デフォルトの名無しさん:2001/03/14(水) 12:49
>>360
>if( (code!=CODE1) && (code!=CODE2) && (code!=CODE3) ){
if(!((code==CODE1) || (code==CODE2) || (code==CODE3)) ){
こっちの方がいいってこと?

べつにどっちでもいいと思うが...
363デフォルトの名無しさん:2001/03/14(水) 13:03
>>362
一番いいのは、
if(code == CODE4){
だろう。
364デフォルトの名無しさん:2001/03/14(水) 13:12
>>362
糞コードを書きそうな人発見(w
365デフォルトの名無しさん:2001/03/14(水) 13:34
>>363
TCODEが増える可能性があって、CODE1〜3以外の時は必ず実行したいなら
糞コードじゃないけどな。
366デフォルトの名無しさん:2001/03/14(水) 14:17
糞コードと言われないようにコメントつけにゃいかんな。
367デフォルトの名無しさん:2001/03/14(水) 14:41
>>365

if(code >= CODE4){

と書くと、

typedef enum{
  CODE5,
  CODE1,
  CODE2,
  CODE3,
  CODE4
} TCODE;

にされたら死。なので、

switch(code){
case CODE1:
case CODE2:
case CODE3:
  break;
default:
  //目的の処理
  break;
}

なら、あるいは。
368363:2001/03/14(水) 14:44
>>365
その可能性は確かにな。
ただ、あのコードを見る限りじゃ、これが最短かと。(必ずしも最善ではない)
369デフォルトの名無しさん:2001/03/14(水) 17:43
「CODE4の時は実行」とは明確に分けるべき。
あのコードを見た限りじゃ拡張されることもあると取るのが自然。
363の方がどっちかっていや糞。
370デフォルトの名無しさん:2001/03/14(水) 18:15
>>367
switch(code){
case CODE1: code1; break;
case CODE2: code2; break;
case CODE3: code3; break;
case CODE4: code4; break;
default: error; break;
}
のほうが良いと思うけど…。
defaultは本当にdefault(デフォルト)の処理か、
予想外のデータの時に使ってます。
どうなんだろう。
371360:2001/03/15(木) 00:23
みなさん、参考になりました。
説明足らずでしたが、列挙型の定数は増える可能性はありまくりです。
というか、基本的に開発途上のコードだったら、増えるのは当たり前ですよね?
(ちがう?(^^;
360で挙げた例は、そうとう彼の性格を現していたように思えたので書きこんでしまいました。
前後のコードがまた凄いんだが・・

基本的に370の書き方が適当だと思ういますがどうでしょう?
でないと何のための列挙型なんだか、って感じしませんか?

いずれにしても、ほとんど説明ない状態で、色々な書き方やら考えが出てきて、
面白かったですし、タメになりました〜

372名無しの笛の踊り:2001/03/15(木) 00:33
Javaなら、

interface Command{public void func();}
static Map commandmap = new HashMap();
static{
 commandmap.put("CODE1",new Command(){public void func(){/*無処理*/}});
 commandmap.put("CODE2",new Command(){public void func(){/*無処理*/}});
 commandmap.put("CODE3",new Command(){public void func(){なんか処理()}});
}

とかにしといて、SWITCHのかわりに、

Command command =(Command)commandmap.get(key);
if(command!=null){command.func();}

でどう?分岐が増えるたびにMapに追加。
373デフォルトの名無しさん:2001/03/15(木) 01:25
>>346
1日前の日付を獲得するのは結構難しいとおもうけど
システムにもよるけと
-1でいいのはVBぐらいでないの
374デフォルトの名無しさん:2001/03/15(木) 01:40
CTimeSpanとか使う。
375デフォルトの名無しさん:2001/03/15(木) 01:42
372は勘違いしてるとしかおもえん。
ちなみにC++でも同様のコードは簡単。
この状況で間違っても使わないって言うか使えないけど。
376デフォルトの名無しさん:2001/03/15(木) 08:30
「糞コード」って、なんて読むんだ?
「くそこーど」か?それとも「うんこーど」?
377デフォルトの名無しさん:2001/03/15(木) 11:24
米異コードで、my codeと読みます。
つまり君のコードだよ。
378デフォルトの名無しさん:2001/03/15(木) 11:57
よくわからない言語なんですけどループの中に


IF スキップする条件
SKIP
LOOP
ElSE
死ぬほど長い処理
ENDIF

ってのが何重にもネストしてるはダメだよね?
379デフォルトの名無しさん:2001/03/15(木) 12:30
>>376
「クソ行動」と読みます
380デフォルトの名無しさん:2001/03/15(木) 12:31
そいや、ifから次のelseまでが500ライン超えてるよーな処理見たっけ。
んでもってifの階層が9段階ぐらいあった
381デフォルトの名無しさん:2001/03/15(木) 16:20
yaccの吐いたソースをメンテしたことあります
アクションの中でよかったけど
もとのソースなくすなよ
382デフォルトの名無しさん:2001/03/15(木) 17:03
return("終了");
383デフォルトの名無しさん:2001/03/15(木) 17:06
if( a != 0 ) {
continue;
b = a * 2;
break;
}
else if( a == 0 ) {
continue;
printf( "aが0になりました。終了します。\n" );
break;
}

return;


ナニコレ...
384デフォルトの名無しさん:2001/03/15(木) 17:18
>>346
クライアントアプリで、Oracleサーバのマシンタイムが必要なときはやったことある。
ローカルタイムではクライアント毎に一致している保証がないからね。
385デフォルトの名無しさん:2001/03/15(木) 17:26
>>382
returnの引数(とはいわねーか)を括弧でくくるのがダメってことだよね。
386デフォルトの名無しさん:2001/03/15(木) 17:38
Sunの最近のccはsjisが埋め込まれたソースでもコンパイルできるのびっくりした。
すれ違いすまんsage

387デフォルトの名無しさん:2001/03/15(木) 18:00
>>382
これって"終了"はスタックに積まれて、復帰後開放されるんじゃ
ないの?
仮にprinf("%s", func());で表示されると、開放されてるけど
ゴミとして残ってる内容を表示するだけだよね
どこまで(礼儀も含めて)正しいのか、イマイチ自信が無い
388デフォルトの名無しさん:2001/03/15(木) 18:08
しねーよ。
>>387
389デフォルトの名無しさん:2001/03/15(木) 18:11
mona.cpp
//////////////////////////////
#define _ 0
#define __ _
#define ______________ A___A
#define O MA E MO NA- ( ^∀^)
;int ______________ ( )
{int l = l | l
; return( (__)-_)
;}
//////////////////////////////
390389:2001/03/15(木) 18:14
>>389
スペースがうまく排卵ね。スマソ。
391デフォルトの名無しさん:2001/03/15(木) 18:33
スペースは&amp;nbsp;に変換してカキコしてね
392389:2001/03/15(木) 19:19
>>391
アドヴァイスどうもです。
初心者板で変換して書いてみたけど、やっぱ駄目だ。
等幅フォントじゃないと無理そうだなぇ。
コンパイル通らなくなるのを覚悟で全角化するか...。
393デフォルトの名無しさん:2001/03/15(木) 19:40
>>387
なんか勘違いしてないか?

const char *f1( void ) {
char str[] = "終了";
return str;
}
はやっちゃいけないけど、
const char *f2( void ){
return "終了";
}
は大丈夫だぞ。
394デフォルトの名無しさん:2001/03/15(木) 21:51
// 行頭スペーステスト
void main(void)
{
&nbsp;&nbsp;&nbsp;hoge();
&nbsp;&nbsp;&nbsp;return;
}
// どうなるかな?
395デフォルトの名無しさん:2001/03/15(木) 21:52
↑こんな感じで、できるよ
396デフォルトの名無しさん:2001/03/15(木) 23:22
ありゃりゃん、できるようになったの?
397デフォルトの名無しさん:2001/03/15(木) 23:40
&nbsp;テスト
&amp;nbsp;を入れてるのかな
398デフォルトの名無しさん:2001/03/16(金) 00:14
そだよ
399モナー板より:2001/03/16(金) 02:26
・半角スペースは、2個以上連ねると、1個として表示されます。
 (半角スペースを続けて2個以上使わない)
・行頭の半角スペースは、消えて表示されます。
 (行頭に半角スペースを使うと、ズレます)
400デフォルトの名無しさん:2001/03/16(金) 13:17
winsockの話。

TCPでデータレングスが不定でしかも数キロバイト程度のものも想定されるのに
一度しかrecv()してない……のはまあ許そう。

select() くらいしろよボケ。(泣)
401デフォルトの名無しさん:2001/03/16(金) 15:51

 
    
  
   
    
  
   
   
  
        ぎゃあ。
402400:2001/03/16(金) 17:42
書き忘れ。

…しかもシングルタスク。
403デフォルトの名無しさん:2001/03/16(金) 19:10
>>400,402
わかりやすくて良いじゃん(藁
404デフォルトの名無しさん:2001/03/16(金) 20:04
今日の仕入れたやつ

void function_Receive(....){

...
function_receive(....);

}

リカーシブかと思った。

こっちは、リカーシブだけど必然性がない
int function(int a)
{
if(a!=0)a=FUNCTION(a);
}

int FUNCTION(int a)
{

a=function(0);

}
405デフォルトの名無しさん:2001/03/16(金) 21:20
似たような関数名を作りまくってるのは糞コード?


void dataFile
void dateFile
void datFile
void fileDate
void dayFile
406デフォルトの名無しさん:2001/03/16(金) 22:28
>>405
そんなやつが俺の部下にいたらデビルチョップを喰らわしてやる。
設計レビュー段階でぶん殴ってると思うけどね。
407デフォルトの名無しさん:2001/03/16(金) 23:59
>>405
結構微妙な線だな…
DateとDataは意味はぜんぜん違うのにたまたまスペルが似てるだけだし、
datFileもDATのファイルかも(ってこじつけだね)
例が悪いよ例が。
void Funca
int Funcb
char Func
なんてのは糞だろうな。
関数名に意味がない、まぎらわしい、関数説明もない正真正銘糞コード。
そんなのを見たことがない人はラッキーだ…。
408デフォルトの名無しさん:2001/03/19(月) 04:23
ASSERT(0 <= nCnt < m_nNum);

あほかっ!


って悪態つこうとしたら、自分のソースでした。
しかも同じような間違いがほかにも数箇所・・・ハズカシイ
だめだ、帰って寝ます・・・
409デフォルトの名無しさん:2001/03/19(月) 23:43
if(a==b){
d=e;
}else if(a!=b){
d=e;
}
なんだけど d=e;でいいはずなんだけど
a b d eとも実際は10文字ていどあるので
なおすのが恐いのでさわりません

修正が度重なるとこんなコードがよくできます。
410405:2001/03/21(水) 14:16
>>407
例が悪いですか・・・スマ
でも、これ事実つーかこないだ実際にあったことだから、、、

やっぱ糞コードなんだよな。そう感じたのが俺だけじゃなくてひと安心
411デフォルトの名無しさん:2001/03/22(木) 12:37
#if 0 のネストがやたらと多いやつ。
まあ気持ちは分かるが…正直見づらい
412デフォルトの名無しさん:2001/03/22(木) 14:30
職場によっては #if 0 のネストが10階層になろうと、
一区切りつくまで消すことを許してくれない場所もあるよ。

以前消す時にバージョンダウンしまくりで大変だったさ
413デフォルトの名無しさん:2001/03/22(木) 15:55
 学校の授業にて。
初めてのプログラミング演習はif文だけ習った状態で
2次方程式の解を求めなさい、というものでした。

俺も初めてながら試行錯誤し、複素解のときの結果も出せるようにがんばり、
できたプログラムのコードが数十行。

で、近くの奴が作っていたプログラムを見て唖然・・・
数百行(2〜300行くらいかな?)で、
しかも2次方程式なんだから結果はせいぜいx1, x2みたいに
変数二つあれば事足りるはずなのに、
x1, x2, x3, x4, x5, x6, x7, x8, x9;
と、結果を代入する(と思われる)変数が9個も。

 そんな個性的なプログラムを作った張本人はともかく、
初めての演習でいきなりそいつのソースをコピーして提出していた奴が数人。
もちろん、こっぴどく怒られましたとさ♪

あの頃は初々しかったなぁ(笑)
414linuxなんだけど:2001/03/22(木) 17:07
main()
{
int i=0;
while(fork())printf("%d\n",i++);
}

なんでこのコードが死なずに動作しつづけるのかわからない。
だれか理由を教えて
415デフォルトの名無しさん:2001/03/22(木) 17:42
>>414
やりたいことはわかるけどそれじゃfork先は0が返るだろ。
それじゃゾンビの街になるだけだよ。
こうやりたかったんじゃないのか?
while(printf("%d\n",i++))fork();

それでもforkに失敗すればプロセス生成されないから
作れるのは全部で1000個くらいだけだ。
lsとかは出来なくなるから嫌がらせはなるぴょん。
416デフォルトの名無しさん:2001/03/22(木) 17:47
しっかし、
>>130-137 のやりとりはいつ見ても最高だなぁ
417デフォルトの名無しさん:2001/03/22(木) 18:16
>>416
おもろいけど、これ自作自演だろ?
418デフォルトの名無しさん:2001/03/22(木) 18:23
>>415
> それでもforkに失敗すればプロセス生成されないから
生成できなくなっても -1 を返すから終了しない。CPUは100%、プロセステーブ
ルは満杯。

> lsとかは出来なくなるから嫌がらせはなるぴょん。
嫌がらせとしてはカンペキかも。
419416:2001/03/23(金) 02:16
>>417
多分自作自演なんだろうけど、
何か妙なオーラが出てますよね。
420>419:2001/03/23(金) 02:32
オーラバトラー?
421デフォルトの名無しさん:2001/03/23(金) 16:22
自分の名前を変数名、関数名にしちゃう奴。
コメントも書かなけりゃ、ドキュメントも残さない。
バグだけ残して会社辞めやがった。

void komatu( void )
{
int ko;
ko = koma();
koma2(ko);
kom(ko);



}

延々とこんなのが続く。
どーすりゃいいんだよ。ったく。
422デフォルトの名無しさん:2001/03/23(金) 16:46
>>421
すげぇなソイツ。会社辞めてどうしたのか気になる…フリーター?
423130:2001/03/23(金) 18:31
>>416
う〜む、おいらは130しか書いてないよ。
424デフォルトの名無しさん:2001/03/24(土) 18:55
HSPの掲示板逝けば糞コード沢山あるよ。
425err:2001/03/24(土) 23:58
糞コードばいざーい
426名無し。:2001/03/25(日) 01:17
関数の引数が27個。
んでもって、一関数に1000を超えるステップ数。
そういう関数の似たようなものが多数。
次の日にマジギレして辞めた。
人生で一番の糞コード。
未だに酒の席の笑い種。
427デフォルトの名無しさん:2001/03/29(木) 15:07
見てみてぇ・・・>426
428デフォルトの名無しさん:2001/03/29(木) 15:24
>>426
全部グローバル変数で受け渡しされるより*多少*まし
429デフォルトの名無しさん:2001/03/29(木) 16:22
>>426
数値計算関係だと良くあるよ。書いてる人は工学の専門家であって、
プログラマじゃないもんで、動けばいいやって感じ。数値計算ってこと
でFORTRANを使ってた人が多いから、その感覚でグローバル変数の
嵐。グローバルで i が宣言されてたり、forループ6段、全長1000ステップ
以上のmain関数1個のみとか。
430デフォルトの名無しさん:2001/03/29(木) 17:24
自分一人がメンテして「それでヨシ!」と思えてるんなら
それなりにかっこいいな。
「プログラムで飯食ってんじゃねえ!」ってとこが。
431デフォルトの名無しさん:2001/03/29(木) 18:41
>430
かっこいいかもしれんが、そいつの尻拭いは勘弁だ。
432デフォルトの名無しさん:2001/03/29(木) 19:13
明日でここの会社終了なので、今資料を作ってて・・・気付いた
1年前にCで組んだソース、別の人がテストや修正を行ったのだが、

#ifdef DEBUG
fprintf( stdout, "取得ファイル名[%s]\n", sFname );
#endif

のように書いてある場所が全て

/* #ifdef DEBUG */
/* fprintf( stdout, "取得ファイル名[%s]\n", sFname ); */
/* #endif */

になっているのだ。これ何だ? と聞いたら

 「既にあったコードを消してはいけないといわれたので
  無駄な部分はコメントアウトしました」
と平気な顔で言われた。
(年上なので)○○さん、マクロ知らないんですか? と聞いたら
 「何のマクロ?」
何って、#ifdef DEBUG ですやん。と言ったら
 「DEBUGなんてマクロどこにも宣言されてなかったで」

糞・・・

433名無しさん@お腹いっぱい。:2001/03/29(木) 20:05
あのう、ACCESSのフィールド名に日本語使ってるの見ると
むかっ腹立つの僕だけですか?
434デフォルトの名無しさん:2001/03/29(木) 20:48
糞コードもいいが糞画面デザインも募集
435デフォルトの名無しさん:2001/03/29(木) 21:43
極窓なんてどうですか>糞画面
436デフォルトの名無しさん:2001/03/30(金) 05:23
ぬぁー
<DirectX 8.0a SDK>\samples\Multimedia\Common\src\D3DApp.cpp

の296行目から370行目あたりがかなーり糞に思えるんですけど・・・(;_;)
素直にgoto使えよ‥‥。
437デフォルトの名無しさん:2001/03/30(金) 10:17
/* 変数 */
char a;
int b;
char c;

/* クリア */
char *p;
for(p=&a;p<=&c;p++) *p=0;

鬱です。
438デフォルトの名無しさん:2001/03/30(金) 12:47
>>437
それって、マシンによっては落ちるんじゃ無かったかな。
HPの古いのなんかは、そーだった記憶がある。
439デフォルトの名無しさん:2001/03/30(金) 13:03
>>436
引用きぼんぬ。問題にならなきゃ。
440デフォルトの名無しさん:2001/03/30(金) 13:04
>>438
つーか、何をどこまでクリアするかまったく保証がない。
441デフォルトの名無しさん:2001/03/30(金) 13:18
>>435
あれは逸品ですな
442デフォルトの名無しさん:2001/03/30(金) 13:20
>>434
Vectorにあるゲームの「釣りへ行こうよ」
プログレスバーをそのまま利用した画期的ゲム。鬱だ。
443デフォルトの名無しさん:2001/03/30(金) 13:23
確か、pag1テトラヘドロンのUIがすごかった。
444デフォルトの名無しさん:2001/03/30(金) 19:45
>>439
そんなに糞でもないとは思うが、確かにgoto使えばもすこしキレイにはなる。

//&nbsp;Skip&nbsp;formats&nbsp;that&nbsp;cannot&nbsp;be&nbsp;used&nbsp;as&nbsp;render&nbsp;targets&nbsp;on&nbsp;this&nbsp;device
if(&nbsp;FAILED(&nbsp;m_pD3D->CheckDeviceType(&nbsp;iAdapter,&nbsp;pDevice->DeviceType,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formats[f],&nbsp;formats[f],&nbsp;FALSE&nbsp;)&nbsp;)&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;continue;

if(&nbsp;pDevice->DeviceType&nbsp;==&nbsp;D3DDEVTYPE_HAL&nbsp;)
{
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;This&nbsp;system&nbsp;has&nbsp;a&nbsp;HAL&nbsp;device
&nbsp;&nbsp;&nbsp;&nbsp;bHALExists&nbsp;=&nbsp;TRUE;

&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;pDevice->d3dCaps.Caps2&nbsp;&&nbsp;D3DCAPS2_CANRENDERWINDOWED&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;HAL&nbsp;can&nbsp;run&nbsp;in&nbsp;a&nbsp;window&nbsp;for&nbsp;some&nbsp;mode
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bHALIsWindowedCompatible&nbsp;=&nbsp;TRUE;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;f&nbsp;==&nbsp;0&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;HAL&nbsp;can&nbsp;run&nbsp;in&nbsp;a&nbsp;window&nbsp;for&nbsp;the&nbsp;current&nbsp;desktop&nbsp;mode
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bHALIsDesktopCompatible&nbsp;=&nbsp;TRUE;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
}
445デフォルトの名無しさん:2001/03/30(金) 19:46

//&nbsp;Confirm&nbsp;the&nbsp;device/format&nbsp;for&nbsp;HW&nbsp;vertex&nbsp;processing
if(&nbsp;pDevice->d3dCaps.DevCaps&D3DDEVCAPS_HWTRANSFORMANDLIGHT&nbsp;)
{
&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;pDevice->d3dCaps.DevCaps&D3DDEVCAPS_PUREDEVICE&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwBehavior[f]&nbsp;=&nbsp;D3DCREATE_HARDWARE_VERTEXPROCESSING&nbsp;|
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D3DCREATE_PUREDEVICE;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;SUCCEEDED(&nbsp;ConfirmDevice(&nbsp;&pDevice->d3dCaps,&nbsp;dwBehavior[f],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formats[f]&nbsp;)&nbsp;)&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bFormatConfirmed[f]&nbsp;=&nbsp;TRUE;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;FALSE&nbsp;==&nbsp;bFormatConfirmed[f]&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwBehavior[f]&nbsp;=&nbsp;D3DCREATE_HARDWARE_VERTEXPROCESSING;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;SUCCEEDED(&nbsp;ConfirmDevice(&nbsp;&pDevice->d3dCaps,&nbsp;dwBehavior[f],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formats[f]&nbsp;)&nbsp;)&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bFormatConfirmed[f]&nbsp;=&nbsp;TRUE;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;FALSE&nbsp;==&nbsp;bFormatConfirmed[f]&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwBehavior[f]&nbsp;=&nbsp;D3DCREATE_MIXED_VERTEXPROCESSING;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;SUCCEEDED(&nbsp;ConfirmDevice(&nbsp;&pDevice->d3dCaps,&nbsp;dwBehavior[f],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formats[f]&nbsp;)&nbsp;)&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bFormatConfirmed[f]&nbsp;=&nbsp;TRUE;
&nbsp;&nbsp;&nbsp;&nbsp;}
}

446デフォルトの名無しさん:2001/03/30(金) 19:46
//&nbsp;Confirm&nbsp;the&nbsp;device/format&nbsp;for&nbsp;SW&nbsp;vertex&nbsp;processing
if(&nbsp;FALSE&nbsp;==&nbsp;bFormatConfirmed[f]&nbsp;)
{
&nbsp;&nbsp;&nbsp;&nbsp;dwBehavior[f]&nbsp;=&nbsp;D3DCREATE_SOFTWARE_VERTEXPROCESSING;

&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;SUCCEEDED(&nbsp;ConfirmDevice(&nbsp;&pDevice->d3dCaps,&nbsp;dwBehavior[f],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formats[f]&nbsp;)&nbsp;)&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bFormatConfirmed[f]&nbsp;=&nbsp;TRUE;
}

//&nbsp;Find&nbsp;a&nbsp;suitable&nbsp;depth/stencil&nbsp;buffer&nbsp;format&nbsp;for&nbsp;this&nbsp;device/format
if(&nbsp;bFormatConfirmed[f]&nbsp;&&&nbsp;m_bUseDepthBuffer&nbsp;)
{
&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;!FindDepthStencilFormat(&nbsp;iAdapter,&nbsp;pDevice->DeviceType,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formats[f],&nbsp;&fmtDepthStencil[f]&nbsp;)&nbsp;)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bFormatConfirmed[f]&nbsp;=&nbsp;FALSE;
&nbsp;&nbsp;&nbsp;&nbsp;}
}
447デフォルトの名無しさん:2001/03/30(金) 22:03
#ifdef DEBUG
・・・・
#endif
というのがいっぱいあるけど
念のためにmakeをみたら defineされてた

448デフォルトの名無しさん:2001/03/31(土) 00:48
>>447
それは担当者がヴォケなだけでコードが糞なわけではない
449デフォルトの名無しさん:2001/03/31(土) 11:10
if ( strcmp(str,NULL) == 0 ) {
 /* 処理 */
}
450デフォルトの名無しさん:2001/03/31(土) 11:29
>>260
亀レスなんだけど、

pa = NULL;
pb = NULL;
pc = NULL;

ってやっといて、
catch(){
if( pa != NULL ) free(pa);
if( pb != NULL ) free(pb);
}

じゃあかんのん?
451デフォルトの名無しさん:2001/03/31(土) 11:35
とりあえずインデントが深すぎるコードは独断で糞コード決定
452デフォルトの名無しさん:2001/03/31(土) 13:42
>>450
if( pa != NULL ) free(pa);
は、単に
free(pa);
でいいと思うけど。
453>452:2001/03/31(土) 13:47
それはまずいよ・・ネタ?
454デフォルトの名無しさん:2001/03/31(土) 14:01
>>452
free(NULL) って無動作でしたか。
自信が持てないので念のためNULLチェックしてますけど。
455>>444-446:2001/03/31(土) 14:06
なんかそのクソ長いマクロ名、嫌がらせとしか思えないんだけど。M$か。
#defineし直せば?
456>454:2001/03/31(土) 14:09
free(NULL)は危険。そのうち酷い目にあうぞ
457デフォルトの名無しさん:2001/03/31(土) 15:10
>>456
ANSI C で「free(NULL) は何も実行しない」と規定され
てるけど。規格じゃなくて、別の問題?
458デフォルトの名無しさん:2001/03/31(土) 16:36
無動作しないコンパイラなのか?
「そのうち」は来ないからだいじょぶ
459デフォルトの名無しさん:2001/03/31(土) 17:58
NULLポインターの解放は安全のはずなり。
もし変になるとしたら、その環境のfreeの実装がおかしい。
っていうか、実際free(NULL)しちゃいけない環境があったのよ……(組み込み系のライブラリ)
460デフォルトの名無しさん:2001/03/31(土) 18:46
>>459
組み込みだと ANSI C とはいっても freestanding でしょ?
それは hosted environment とは別物なんで、分けて考えた
方が良い。

freestanding environment だと、そもそもライブラリ関数は
全て implementation-defined だから malloc/free が無いか
もしれないし、あっても仕様が全然違うかもしれない。
461デフォルトの名無しさん:2001/03/31(土) 23:11
C++がなくても問題ないといえる言語が出てくるまで・・・待て。
462HOGE:2001/04/01(日) 18:48
> 433
> あのう、ACCESSのフィールド名に日本語使ってるの見ると
> むかっ腹立つの僕だけですか?

健全な感覚。多言語(開発ツール)出身者なら、当然そう思うでしょうね。

識別子に平気で日本語文字を使いまくるのは、(やってよいことと悪いこと
のまともな判断ができない)ユーザー(糞PG)も悪いけれど、元はといえば、
新規インスタンスにデフォルトで日本語名を付けるメーカー(某毎黒粗太)
が悪いと思う。

最近では、市販の技術書や初心者向けの教本にまで、日本語の変数(オブジェ
クト)名が・・・。

有津打士農
463HOGE:2001/04/01(日) 18:49
> 462

> 多言語

他言語に訂正。

迂通出汁濃・・・。
464HOGE:2001/04/01(日) 18:54
> 462

> 市販の技術書や初心者向けの教本

自分で確かめた訳ではないが、知り合いの話では、金額の四捨五入に
浮動小数点数を使用したサンプルコードを載せたカス本まで出回って
いるようです。

日本の未来は暗い・・・。
465てんさいぷろぐらむぁ(偽):2001/04/01(日) 19:00
>>459
freeぢゃないけどVCでdelete NULL をすると死んだみたいだねぇ
さーびすぱっくで修正されたらしいけど。
つーかdelete NULL が良いんだか悪いんだか忘れました。
鬱だ氏脳
466HOGE:2001/04/01(日) 19:00
> 462

> 識別子に平気で日本語文字を

そういえば、害虫のバカPGが作ったAccessの腐れPGで、
括弧やスペース(空白文字)入りの識別子を見たことが
ある。コンパイル通るのが不思議だ・・・。(W

関り合いになりたくねぇなぁと思いました。

撃つ堕・・・。
467デフォルトの名無しさん:2001/04/02(月) 02:02
>>457
free(NULL)は問題ないけど、あえてNULLチェックをかけるのは
解放したポインタ変数をNULLにしたいからって場合が多いと思う。
解放済みなのにfree()して酷い目にあうことあるし。

if(p)
{
free(p);
p=NULL;
}
468デフォルトの名無しさん:2001/04/02(月) 02:27
>>467
その論調でいくと、ifは要らないよう({}内だけで十分)な印象を受ける
469>468:2001/04/02(月) 02:29
関数呼出しのコストを下げる
470デフォルトの名無しさん:2001/04/02(月) 06:31
delete (NULL);
はOKですよ。

>>469
たしかにその通りだが、468が言いたいのは
free( 解放済み領域を指すポインタ )を避けるというなら

free( p );// NULLであれば解放済みか確保前
p = NULL;

だけで十分ということでない?
471デフォルトの名無しさん:2001/04/02(月) 08:59
私は、ACCESSではね日本語遣いまくつてます。
プログラムが10倍わかりやすいので。
変数、関数も日本語です。
S-JISコードでprintfに漢字コードを使うと
おかしくなるシステムなども経験したことがありますのて
恐いきもするのですが
変な英語名使うより読みやすいしめんてが楽です。

データベースの仕様書に住所(1)、住所(2)...となってたので
そのままフィールド名にして、後で作りなおしたことはあります。
VB・クエリー使わなければ、住所(1)も通ってしまうとこが恐い。
472デフォルトの名無しさん:2001/04/02(月) 09:24
>>417
明らかにネタなので、放置ヨロピク。
473デフォルトの名無しさん:2001/04/02(月) 09:57
>>472
>>417 -> >>471

鬱氏。
474ほにゃにゃら:2001/04/02(月) 12:04
> 471

> 私は、ACCESSではね日本語遣いまくつてます。
> プログラムが10倍わかりやすいので。

質問です。

(1) 命名規約というのをご存知ですか?

(2) コメントという言葉、概念、意義をご存知ですか?
475デフォルトの名無しさん:2001/04/02(月) 12:46
>>474
>>471 はネタなので放置ヨロピク〜。
476デフォルトの名無しさん:2001/04/02(月) 12:57
ネタとは断言できないのでは?
コボル上がりの人ってよく日本語使うみたいよ。
477デフォルトの名無しさん:2001/04/02(月) 13:25
ネタかどうかはともかく
使いてーという願いはかなりのプログラマが持ってないか?
478デフォルトの名無しさん:2001/04/02(月) 14:09
プログラム=ドキュメントというのも一つの理想だよね。
479デフォルトの名無しさん:2001/04/02(月) 14:59
>>476
大丈夫?
480デフォルトの名無しさん:2001/04/02(月) 17:04
でもうちの課長だった人(その件でこけてクビになった)。
COBOLあがりでVBで日本語使ってたよ。
そういう人は設計も怪しいみたいで、全部直した時は3徹だったなぁ。撃つだ
481デフォルトの名無しさん:2001/04/02(月) 19:05
「日本語が使える環境では日本語を使ってもよい」に一票。
ただし他に移行するとき苦労するのも事実。
482デフォルトの名無しさん:2001/04/02(月) 20:11
ところが、VBの変数の規則には日本語がダメとは書いてないんだわ
漢字コード自体に.とか,()+-!@&$#と同じコードが入ってるやつで
どうなるか実験してみてね
483デフォルトの名無しさん:2001/04/02(月) 23:56
俺も
「これはぜってー以降もしなけりゃ、メンテもしない」
って確信があるときは、日本語使うな。
ソース読みやすくていいよ。イヤホント
484デフォルトの名無しさん:2001/04/03(火) 10:00
ニポンゴage
485ほにゃにゃら:2001/04/05(木) 00:22
機種依存文字とか、特殊文字を識別子に多用すると、原因不明のエラーとかが
多発して、結構おもしろいかも・・・。(第三者的には)
486名無しサンプリング@48kHz:2001/04/05(木) 08:00
Javaは、関数名にUnicodeが使えるんでしょ。
487デフォルトの名無しさん:2001/04/05(木) 08:21
システムによれば
日本語のコメントもまずいことがあるぞ
コンパイラだと、コンパイルエラーが出るが

488デフォルトの名無しさん:2001/04/05(木) 10:28
その昔、HDディスクがイカれて、その時の復旧作業(というか、
別HDへのコピー)の際、日本語ファイル名で散々苦労した記憶が
あります。
それ以来、可能な限りはファイル名には2バイト文字を使わないよう
にしている。
489デフォルトの名無しさん:2001/04/05(木) 11:16
>>488
話の流れがいきなりずれているようなきがするにょ。マァイイケド
日本語ファイル名を使いたいときは、アーカイバーツールを使うようにしてるよ。
最近はグラフィカルに表示できて、普通のファイルシステムのように
使えるのも多いし、便利。
490デフォルトの名無しさん:2001/04/05(木) 13:02
ローマ字にするとやたら長くなるよう名前の場合は日本語が使えたら
良いなぁと思うときがある。
前年同月売上目標達成率を
ZennenDougetuUriageMokuhyouTasseiRitu
なんて識別子にするのはタイプミスしそうだし、英語にしようとも
英語でどういうか判らんし。変に省略しても意味不明になりそうだ
し。
491デフォルトの名無しさん:2001/04/05(木) 16:32
でも英語でタイプミスしてても「てへっ」で済むけど、
日本語で誤字してた日にゃあ・・・・バカではすみませんな
492デフォルトの名無しさん:2001/04/05(木) 20:25
>>491
幸せな仕事場だな…英語でスペルミスでもバカじゃすまんだろフツー
493デフォルトの名無しさん:2001/04/05(木) 20:55
millenium
494デフォルトの名無しさん:2001/04/06(金) 09:47
>>492
昔からのソースを引き継いでいるとこだろ、英語でスペルミスなんて
当たり前のようにあるぞ

writeをriteとか、fileをfailとか
495デフォルトの名無しさん:2001/04/06(金) 12:57
>>494
そういうのはスペルミスではなくて、単なる馬鹿。
496デフォルトの名無しさん:2001/04/08(日) 16:59
#define CHECH(a) if((a)==0)
#define PROC(a,b) (a=(b))

CHECK(a) PROC(b,c);

あとから、メンテするもんは、びっくりするから
あんまりへんなマクロは使わないでね。
497デフォルトの名無しさん:2001/04/08(日) 23:22
>>496
(・∀・)トテモイイ!!
498デフォルトの名無しさん:2001/04/09(月) 00:16
>>496
一瞬ふつうじゃんと思わせるところがナイス
499デフォルトの名無しさん:2001/04/09(月) 00:18
>>496
これは、>>492からの流れを受けたネタか?
500デフォルトの名無しさん:2001/04/09(月) 01:51
#define CHECH(a) if((a)==0)
#define PROC(a) a=
#define ALLOC(a,b) (malloc(a*(b)))

CHECK(a) PROC(b) ALLOC(2,1024);
501デフォルトの名無しさん:2001/04/09(月) 07:43
CHECHでなくてCHECK すんません

func(a) foo(b,c);
502デフォルトの名無しさん:2001/04/09(月) 07:57
>>500
すげえな。厨房マクロ禁止令出してえ…
503デフォルトの名無しさん:2001/04/09(月) 10:39
CHECK...

CHECH...

???
504デフォルトの名無しさん:2001/04/09(月) 10:45
int filetype = 0; /* 初期値 */
int fileopenflag = 1; /* ファイル初期値 */

void ****_init()
{
/* 初期設定 */

}

int ****_initbuffer()
{
/* 初期設定 */

return( ret );
}

void ****_**_set()
{
/* 初期設定 */
}

void ***_check()
{
/* チェック */
}

void ***_setdata()
{
/* 初期化 */
}

コメントずっとこの調子。しかもこれ以外なし。
解析死にそう・・・
505デフォルトの名無しさん:2001/04/09(月) 10:46
>>500
多分作者はアセンブラ使いだったんだろう
506デフォルトの名無しさん:2001/04/09(月) 10:54
>>504
まあ、日本語があるとちょっと和むし・・・
ってそういう問題じゃねーよな。御愁傷様
507糞コーダー必読書:2001/04/09(月) 11:47
508デフォルトの名無しさん:2001/04/09(月) 15:34
↑最古ー
509デフォルトの名無しさん:2001/04/09(月) 17:59
>>507
リンク跳んだら関西大学じゃん・・
結構良い大学なのに授業内容は様々ね。
510天災:2001/04/09(月) 23:02
>>507
#define FUNCTION
#define Main() void main(void)
#define VARIABLE {
#define BEGIN
#define END }

なんじゃこりゃ。
511デフォルトの名無しさん:2001/04/09(月) 23:40
http://www.res.kutc.kansai-u.ac.jp/%7Enakagawa/book.html
507のリンク先のソースすっげー。
最初ネタかとおもたよ。

Modula-2バリにやりたいなら最初からModula-2使えよ・・・。
さすがに、Pascal使いのオレも引くよこれ。
512デフォルトの名無しさん:2001/04/10(火) 00:12
まあプリプロセッサを好き勝手に使ってみるってのは
誰でも厨房のころに一度ははまるものでしょ。
気持ちはわからないでもない。

それにしても糞コード書き散らす大学教授って結構な割合でいるよな。
人間関係気にして誰も指摘してあげないんだけど(藁
513デフォルトの名無しさん:2001/04/10(火) 09:11
教授や博士はプライドだけは高いから・・・
514ε:2001/04/10(火) 19:45
>>494
fileをfailなら、俺も見たことあるよ。
fileとfailじゃ意味が全く違うからねえ。
515デフォルトの名無しさん:2001/04/11(水) 09:32
スペルミスで失敗。駄洒落?
516デフォルトの名無しさん:2001/04/11(水) 15:15
クソコード?
汎化のみで分析(?)されたオブジェクト指向「風」ソース。
なにか一つのベースクラスに、ごてごてと機能が実装され、
そいつがありとあらゆるクラスに継承されている。
こうなったら、ベースクラスのメンバ変数なんて、グローバル変数と変わりなし。
コンセプトがはっきりしない継承は使うな!
グループ開発では、継承禁止のルールにしたほうがスムースに開発進んだりします。

あと、C++ではSmallTalk風に継承をつかった分析をしてはいけないようです。
どっかで読みましたが、C++の設計者が言ってるらしいから間違い無いでしょう。
小さいクラスとテンプレートで実装するのがC++流だとか。
つまり、STLとかiostreamとかの標準クラスの実装に従えって事すね。
#最近のiostaremはテンプレートで実装されてます。ムカシは違ったけど。
517デフォルトの名無しさん:2001/04/12(木) 03:27
そうそう。
小さいクラスこそ C++ の美しさ。
大きいのはどのクソooplでも出来る、
ただのクラス。
518デフォルトの名無しさん:2001/04/12(木) 19:01
for(i=0;i<0100;i++0)テン点々

int a=0xFFFFFFFF;

わざとかい
519デフォルトの名無しさん:2001/04/12(木) 20:06
for(i=0;i<0100;i++) sorry
520デフォルトの名無しさん:2001/04/12(木) 20:35
アホなPascal 使いがCを使うときに
#define BEGIN {
#define END }
するという都市伝説があるが、本当なのか?
証言求ム。
521デフォルトの名無しさん:2001/04/12(木) 21:10
Modula-2だろ?>520
ご丁寧なことに、大学で教えてたらしいぞ。
522デフォルトの名無しさん:2001/04/13(金) 20:04
不細工だとおもいつつ時間がないのでやりました
文字列を表示して改行する専用の関数print(char*);があるとしてください
#define TITLE1 "gomennasi"
#define TITLE2 "kaigousitara komaru"

print(TITLE1 TITLE2);

523デフォルトの名無しさん:2001/04/14(土) 21:16
>520
507のリンク先でも名前のでている「Cプログラミング診断室」
という本(Webもあり)で、その実例が載っているぞ。

>522
Putsでなく?
524デフォルトの名無しさん:2001/04/16(月) 13:29
int a;
a = 5; /* aに5を代入する */

…いや、確かにそうなんだが、コメントになってない…。
525デフォルトの名無しさん:2001/04/17(火) 00:46
value = atoi(argv[2]);
526デフォルトの名無しさん:2001/04/17(火) 01:11
>>525
見逃しておくれ・・・
527デフォルトの名無しさん:2001/04/17(火) 01:21
>>525 のどこが糞なのか分からん…
528デフォルトの名無しさん:2001/04/17(火) 02:56
コマンドラインのユーザー入力なんていう「汚染された」文字列を
いきなりatoiなんていう特定フォーマット
(ここでは数字)キメウチの関数にぶっこんでるからでわ?

#ふと、atokと書きそうになった…
529デフォルトの名無しさん:2001/04/17(火) 02:59
>>528ワラタ
日本語変換ライブラリ関数atok()
530デフォルトの名無しさん:2001/04/17(火) 03:24
>>528

>いきなりatoiなんていう特定フォーマット

なんで1行しか書かれていないのに、イキナリって判るん
だろう?
謎だ。。。
528は引数をかならずピーコしてから取り扱うの?
531デフォルトの名無しさん:2001/04/17(火) 03:47
おいらのコードなんだけど、↓は糞かな?

int line;

try{
 HRESULT hr;

 hr = ...

 if (line = __LINE__, FAILED(hr)) throw (hr);

 hr = ...

 if (line = __LINE__, FAILED(hr)) throw (hr);

 // 以下延々と・・・。
}
catch(HRESULT hr)
{
 string str = ... // hr に対応したエラーメッセージ
 cerr << line << "\t" << str.c_str() << endl;
}
532デフォルトの名無しさん:2001/04/17(火) 09:09
>>530
うん、それにatoiはその辺結構安全な関数だ。
sscanf使うならともかく。
使い捨てなら普通にそう書いても別に問題なし。
533デフォルトの名無しさん:2001/04/17(火) 09:27
argv[2] == NULLのときにいきなり例外で落ちるのでは?
534>525:2001/04/17(火) 09:30
引数が指定されなかったらだめということだと思う
535534:2001/04/17(火) 09:32
かぶった
536デフォルトの名無しさん:2001/04/17(火) 09:45
>>531
ifの条件が良く読めないのだけど、どうゆう動きするの?
カンマで区切ったら、どうなるの?
FAILEDのマクロってどんなの?
lineに行番号代入したら常に真じゃないの?
537デフォルトの名無しさん:2001/04/17(火) 09:57
>>533 >>534
その辺がチェックしてあるかどうかは
1行だけ抜き出されてもわかんないじゃん。
538デフォルトの名無しさん:2001/04/17(火) 10:04
>>536
C++言語には、",演算子" という二項演算子があって、
左、右の順で評価され、式の値は右側の式の値になります。
LISP の PROGN と似ていますね。

FAILED というのは英語で「失敗した!」という意味で、
普通は何かの実行に失敗したかどうかの判定マクロの名前だと
思われます。
539デフォルトの名無しさん:2001/04/17(火) 14:21
>>538
補足なんだけど、Cからだよ。

>>531
糞じゃないと思うが。
でも、以下のようだとイヤなり。

void foo( int, int, int );
int main( void )
{
int i, j, k ;
i=0;
  foo( i, (j=i, j+8), (k=j, k+8));
}

つーか、質問。
cerrストリームに出力して大丈夫なの? デバッグコンソールに出力するよう
実装されているのかな!?
俺、VC環境で開発してないから、ふとどうなのかなと。
540デフォルトの名無しさん:2001/04/17(火) 14:39
>>530
>なんで1行しか書かれていないのに、イキナリって判るん

げ。ご指摘の通り。

>528は引数をかならずピーコしてから取り扱うの?

引数であるポインタそのものはピー子するときは結構有るかな。
hoge=argv[2];
とか。

541デフォルトの名無しさん:2001/04/17(火) 14:41
>>531

エラーごとに例外Object(ってのかな)のClassを
適切に使い分けたりしたら、少し綺麗になったりしないかな?

542:2001/04/17(火) 17:52
FORTRANのころ、
IF( なんとか) THEN
   処理
   GOTO 10
ENDIF

IF(かんとか) THEN
10 処理
ENDIF

他のIFのネストの中にGOTOするんじゃない。

543デフォルトの名無しさん:2001/04/19(木) 08:48
私が書いたりした。

(int)((unsigned int)n)

nを正の数にしたりする。
だめ?
544デフォルトの名無しさん:2001/04/19(木) 10:19
>>543
ならないと思うのは気のせいか?
545( ´∀`)さん:2001/04/19(木) 12:12
自分で型処理書けばできるんだろうけど。
546デフォルトの名無しさん:2001/04/19(木) 21:02
cで
if(a==b|| a==c|0x0010)・・・
悩んだが導管がえてもいみがない
a==(c|0x0010)だとおもうが そうするとうまく動かない
547デフォルトの名無しさん:2001/04/26(木) 22:29
>>544
いや、ならないからこのスレに書いているのではないかと。
(int)((unsigned int) -1) == -1
548ぺがさす流星拳☆:2001/04/29(日) 00:25
 既に7〜8年の間、VBひとすぢでやってきたプログラマが、
Option Explicitを知らなかった。

 泣けてくる。
549デフォルトの名無しさん:2001/04/29(日) 00:34
ヘルプ見りゃ書いてあるんじゃないの?>>548
おれ仕事で覚えたとき最初の2、3日で見つけたぞ。
VB2(16bit)〜4(32bit)の時代だけど。
550549:2001/04/29(日) 00:38
つーかあれ無しでまともなプログラム完成できるのか?
551デフォルトの名無しさん :2001/04/29(日) 01:51
C言語で、voidでmainを定義しているのをよく見る。
552>551:2001/04/29(日) 02:09
もうそのネタ飽きた
553ぺがさす流星拳☆:2001/04/29(日) 12:33
>>550
 彼は自分が使用した変数の一覧を、Excel上で
管理してました…。

 泣けるを通り越して、尊敬します。
554デフォルトの名無しさん:2001/04/29(日) 13:27
>>549
>ヘルプ見りゃ書いてある

ヘルプにそれを望むのはどうかなあ?
ヘルプとかの辞書系情報って、字面は知ってるが意味を知らないモノを
探すものでしょ?字面すら見覚えがない状況では役立たず。
まぁインデックス一覧を眺めておくのはお勧めするけど、
最初から意味全然知らない単語は、眺めても記憶にひっかからないんで、
あるレベル以上にのみ通用する手じゃないかと。

>>553
そういうのを二重管理と呼びます。
二重管理状態は「なんとかして解消できないか?」と
常に心を悩ますに値する問題です。
つまり、さっさとやめれ。
プログラムソースの場合は、ソース側で一元管理する以外に
よい方法は無いはずなので、そうすべき。
555デフォルトの名無しさん:2001/04/29(日) 16:15
二重管理状態で思い出した

#define STRING1 "mosimosi"
#define LN_STRING1 8
#define STRING2 "kameyo"
#define LN_STRING2 6
というふうに 延々と定義してあるの

556デフォルトの名無しさん:2001/04/29(日) 18:04
こんなのがありました。

for (int i = 0; i < 10) {
switch (i) {
case 1:
func1();
break;
case 2:
func2();
break;
case 3:
func3();
break;
case 4:
func4();
break;
case 5:
func5();
break;
case 6:
func6();
break;
case 7:
func7();
break;
case 8:
func8();
break;
case 9:
func9();
break;
case 10:
func10();
break;
}
}

これに100点をあげたいのですがどうですか
557デフォルトの名無しさん:2001/04/29(日) 18:16
>>554
>二重管理状態は「なんとかして解消できないか?」と
>常に心を悩ますに値する問題です。

するどい言だ。
558デフォルトの名無しさん:2001/04/29(日) 19:46
>>556
いや、10個しか繰り返していないから10点です(ぉぉぉ<号泣
559デフォルトの名無しさん:2001/04/29(日) 23:17
>>554
>プログラムソースの場合は、ソース側で一元管理する以外に
>よい方法は無いはずなので、そうすべき。

純粋VBじゃなくてVBSだったんじゃない?
スクリプト言語の場合プログラマによってはソースに大漁に
コメント書くのを嫌がる事もありそう。
560559:2001/04/29(日) 23:18
大漁>大量、失礼しました。
561デフォルトの名無しさん:2001/04/29(日) 23:26
コメントが嫌だからどうこうという問題じゃなくて、
#というかコメントを書けば管理したことになるもんでもないし
なにごともソースを中心にすべきなんじゃないの?という話です。

#UMLとかからのコード自動生成環境でも使っているなら
#話は別だが。
562デフォルトの名無しさん:2001/05/01(火) 13:41
あんまり大した事ないけど
C++でのこと:

bool operator>(const hoge& x, const hoge& y) {,
&nbsp;if (x > y)
&nbsp;&nbsp;return true;
&nbsp;else
&nbsp;&nbsp;return false;
}

という感じで延々と全ての関係演算子を定義してあった…。
ちゃんと動作すんのはわかるけどさ。
563ゴルァ!!:2001/05/01(火) 13:45
if( a = 1 ) {

else if( a = 2 ) {

else …
else if( a = 255 ) {

}
564デフォルトの名無しさん:2001/05/01(火) 13:47
>>563
しかも代入文になってるし・・・
565デフォルトの名無しさん:2001/05/01(火) 14:58
>>562 それ本当に動作するか?無限再帰になっているように見えるが
566562 >565:2001/05/01(火) 18:25
書き損じてた!

if (x > y) の部分は比較が適切に行われるようになっていて、
たとえば if (x.value() > x.value()) とでもしてください…
567:2001/05/01(火) 18:27
また間違えたよ。if (x.value() > x.value()) ⇒ if (x.value() > y.value()) ね
568565:2001/05/02(水) 10:27
>>567 誤記ね、了解っす。
#include <utility>
using namespace rel_ops;
この2行があれば、全ての関係演算子を定義する必要なんてないのにねぇ。
569デフォルトの名無しさん:2001/05/02(水) 12:12
>>568
あ〜、標準ライブラリにこういうの入ってるのか。
気付かなかったから自分で書いちゃったよ。次にリファクタリングする
ときに標準版を使うように書きなおそ☆
570( ´∀`)さん :2001/05/03(木) 01:25
 先週退職したプログラマ(笑)の成果物を、今ごろレビューする羽目に。

 MsgBox "日計元表て〜ぶるのキ〜項目でぇ、顧客情報て〜ぶるがヒットしないのぉ☆"
     & strCRLF & "直ちにお近くの技術員を、たたき起こしてねっ☆"

 …き、貴様…てめぇは自分の上司に向かってでも、そんなクチをききやがるか…
571デフォルトの名無しさん:2001/05/03(木) 01:33

どうしても

char hoge[1024];
:
:
if (hoge[0] == NULL) {
:
:
}

と書きたいらしく、そう書いた場合に if の行で警告されるような
処理系だった為

#undef NULL
#define NULL 0

してあった。
572デフォルトの名無しさん:2001/05/03(木) 02:08
バグ治してと言われて、問題のソースを見てみたら

if ( &hoge[0] != NULL )

私には何をしたいのか理解できませんでした。
573デフォルトの名無しさん:2001/05/31(木) 17:43
nantonaku, age
574デフォルトの名無しさん:2001/05/31(木) 17:55
>>571
キャスト使えって話ね。

>>572
スタイルの問題でしょ。
&hoge[i]って書くかhoge+iって書くか。
確かにその場合はhoge!=NULLって書くのが普通だが。
575デフォルトの名無しさん:2001/05/31(木) 18:20
>>574
多分違う。文字列なんだから文字列終端を検出したいんじゃないかな?
> if (hoge[0] == NULL) {
if (hoge[0] == '\0') {

> スタイルの問題でしょ。
これも違う。&hoge[i]が配列内ならNULL値を返すことはありえない。
つまり、if ( &hoge[0] != NULL ) は必ず真をかえす。

規格上では配列外のアドレス演算は未定義なのでNULLを返しても良いが
それはプログラムのバグである。

# なんか最近レベルが下がってきたな...。
576デフォルトの名無しさん:2001/05/31(木) 19:26
既出かもしれんが、
memset(hoge, NULL, sizeof(hoge));
はやめて欲しい・・・。ま、ちゃんと動くんだけど。
(個人的にはsizeofの()もやめて欲しいんだが、sizeofでは必ず()を付けろ
なんていうコーディング規約があったりして萎え)
577576:2001/05/31(木) 19:26
うぐっ。
s/hoge/&hoge/
578デフォルトの名無しさん:2001/05/31(木) 19:36
>>576
似たようなコードを見たことがある…。

f(char s[])
{
memset((void *)s, NULL, sizeof(s));
strcpy(s, ...

佐藤さん、あんたのコードだよ。
いったい何年プログラマやってんだ、てめーは?
579デフォルトの名無しさん:2001/05/31(木) 19:58
>>575
> if (hoge[0] == '\0') {
あ、そうだね。

> これも違う。&hoge[i]が配列内ならNULL値を返すことはありえない。
> つまり、if ( &hoge[0] != NULL ) は必ず真をかえす。
これはhoge+iを&hoge[i]ってスタイルで書く人が
hoge!=NULLってのを&hoge[0]!=NULLって書いたのかなと思った。
580デフォルトの名無しさん:2001/05/31(木) 19:58
>>575
> if (hoge[0] == '\0') {
あ、そうだね。

> これも違う。&hoge[i]が配列内ならNULL値を返すことはありえない。
> つまり、if ( &hoge[0] != NULL ) は必ず真をかえす。
これはhoge+iを&hoge[i]ってスタイルで書く人が
hoge!=NULLってのを&hoge[0]!=NULLって書いたのかなと思った。
581デフォルトの名無しさん:2001/06/02(土) 11:48
NULLはポインターだけに使うのがよろしい
582デフォルトの名無しさん:2001/06/02(土) 15:05
ポインタ変数に0を突っ込んだり0と比較したりするのはやめてほしいナリ
583デフォルトの名無しさん:2001/06/02(土) 15:25
NULL==0症候群の人たちに教えてあげたら?
処理系依存ですって。
584デフォルトの名無しさん:2001/06/02(土) 15:42
今さら何言ってんだ。。。
585デフォルトの名無しさん:2001/06/02(土) 17:38
>>583のように処理系依存と唱える奴に限って、
自分のプログラムは、依存しまくりなものしか作っていない。
586デフォルトの名無しさん:2001/06/02(土) 18:58
>>582
なんで?

>>583
NULL != 0 な処理系もあると?
587デフォルトの名無しさん:2001/06/02(土) 19:07
>>582
#define NULL (void*)0

お前のコンパイラではどうなってる?

0と(void*)0の違いはわかるか?
588デフォルトの名無しさん:2001/06/02(土) 19:39
>>587
ん?
>>582はポインタには0を使わずNULLを使えって言ってるのでしょ?
589デフォルトの名無しさん:2001/06/02(土) 19:48
だから0と(void*)0の違いを(以下略
590デフォルトの名無しさん:2001/06/02(土) 20:10
>>583
処理系依存じゃないだろ。
(void*)0か0かしらんがとりあえずNULLは0だろ?
591デフォルトの名無しさん:2001/06/02(土) 20:11
>>589
違いはもちろんわかるし
わかってるからこそポインタに0を使わずNULLを使うべきだと思うのだが。
592587:2001/06/02(土) 20:23
すまん誤爆。>>587>>586へのツッコミだ

× >>582
>>586

許してくれ>>582
593デフォルトの名無しさん:2001/06/02(土) 20:34
C/C++では0はNULLと同じ様にポインタの意味で使える
ポインタとして0を使用した場合は、
コンパイルの段階でその処理系における「無効ポインタ」
に変換される。
実際にそういった変換を行なうかどうかは処理系による。
594586:2001/06/02(土) 21:04
>>587
ポインタが現れる文脈では、違いなんかないよ。
0 も (void *)0 も、どちらも null pointer constant だ。
595デフォルトの名無しさん:2001/06/02(土) 21:10
>>594
もーいっぺん>>593をよ〜く読め
596!586:2001/06/02(土) 21:19
>実際にそういった変換を行なうかどうかは処理系による。
0が「無効ポインタ」に変換されない処理系もあるわけ?
597デフォルトの名無しさん:2001/06/02(土) 21:35
C言語の定義によれば、ポインターを書くべきところに現れた定数0は、コンパイル時にヌルポインターに変換される。
598デフォルトの名無しさん:2001/06/02(土) 21:40
C FAQ 5.2より。出典を明示しろ。
599デフォルトの名無しさん:2001/06/02(土) 22:24
sizeofを()で囲むのはださいのですか?
600デフォルトの名無しさん:2001/06/02(土) 23:01
結局>>587>>591のいう「違い」って何よ?
601デフォルトの名無しさん:2001/06/02(土) 23:26
>>600
0は現れる場所によって扱われかたが違う。
NULLは「ここはポインタ演算ですよ」と人間に明示するだけで、
実際にはポインタ演算をしていない場所でも使用できてしまう可能性がある。
例えば、
int a = NULL;
この文はNULLの定義が
#define NULL 0
の処理系の場合、合法となってしまう。
それを防ぐために
#define NULL (void *)0
と定義する事によって↑の様な文をエラーとしている。
実際には(void *)はチェックの目的以外必要無い。
602600:2001/06/02(土) 23:50
>>601
NULLの定義じゃなくってさあ、
0と(void *)0の違いを聞いてんのね。

>>587で、
>0と(void*)0の違いはわかるか?
なんつってんだから、当然説明できるっしょ。
603デフォルトの名無しさん:2001/06/02(土) 23:55
それより誰か
#define NULL (void *)0
に突っ込めよ。

こいつの作ったヘッダは使いたくねーな。
604601:2001/06/02(土) 23:56
>>602
おれは>>587じゃないけどさ、あの説明でわかんないの?
0は0。場所によってコンパイラの解釈は変化する。
(void*)0は(void*)にキャストされた無効ポインタ。
605デフォルトの名無しさん:2001/06/03(日) 00:21
>>603
キミとは仕事したくないよ(w
606デフォルトの名無しさん:2001/06/03(日) 00:28
c:\bcc55\includeのヘッダファイルを
秀丸のgrepで引っかけた結果です。

edkmdb.h(575): #define NULL_RESTRICTION 0xff
lmaccess.h(630): #define NULL_USERSETINFO_PASSWD " "
lmcons.h(192): #define NULL 0
lmcons.h(194): #define NULL ((void *)0)
snados.h(47): #define NULL ((void *)0)
windef.h(57): #define NULL 0
windef.h(59): #define NULL ((void *)0)
wingdi.h(100): #define NULLREGION 1
wingdi.h(1582): #define NULL_BRUSH 5
wingdi.h(1586): #define NULL_PEN 8
winldap.h(1940): #define NULLBER ((BerElement *) 0)
607デフォルトの名無しさん:2001/06/03(日) 05:17
>>606
で?何が言いたいの?
608デフォルトの名無しさん:2001/06/03(日) 05:45
607はヴァカと言いたいらしい
609デフォルトの名無しさん:2001/06/03(日) 06:10
で、 >>600 は理解したのか?
610582:2001/06/03(日) 06:56
何人かの方は分かってらっしゃるようで。
コード上のポインタ値としての0をコンパイラがどう解釈するかなんてのは、
その後の 無能な教科書コピペ投稿 で連呼されているように明らかです。
その上でコードはどう書こうかと考えたなら、

ポインタ変数に0を突っ込んだり0と比較したりするのはやめてほしいナリ

と思うわけですが、そんなに難しい話ですか?
611:2001/06/03(日) 07:11
>>610
NULL を使わないとそんなに可読性が低下しますか?
C++ ならむしろ 0 を使うのを推奨してますが….
612デフォルトの名無しさん:2001/06/03(日) 07:28
ポインタと、数って、概念でもまったく別物でしょう。
NULLというポインタ値と、0という数値が、
コード上で0という同じリテラルってのが違和感あります(=可読性低)。

付け足すなら、勉強中の人が混同してしまうのを避けるためにも、
0でなくNULLを使うことが望ましいと思うのです。
613デフォルトの名無しさん:2001/06/03(日) 07:39
int * p = 0;
if( p ) free( p);
if( (p = malloc(256)) == 0 ) error( "allocation error");

0 マンセー(藁
614デフォルトの名無しさん:2001/06/03(日) 07:50
NULL の定義を 0 か (void *)0 どっちがいいかな。
前者じゃあ
int a = NULL;
が成立するから、やっぱり (void *)0 が妥当ですな。
615デフォルトの名無しさん:2001/06/03(日) 07:53
>>610
NULLは無くしてしまった方がいいよ。
if (p) 〜
if (p != NULL) 〜
ほら、有効ポインタ判定で8文字もタイプ量が増えてしまう。
if (!p) 〜
if (p == NULL) 〜
ほら、無効ポインタ判定で7文字もタイプ量が増えてしまう。
p = 0;
p = NULL;
ほら、無効ポインタ代入で3文字もタイプ量が増えてしまう。
616デフォルトの名無しさん:2001/06/03(日) 07:56
>>614
Cではそう思いますが、C++のときは0でなきゃなりません。
(void*)0とした場合、

 char* p = (char*)NULL;

と書かないとダメになるので。
617デフォルトの名無しさん:2001/06/03(日) 08:03
>>611
C++ で NULL を使わないのは話が違うでしょ。
C++ だと void* 型を代入するときにキャスト使えってのと
マクロを使わないで const 使えって話があるから
NULL を使いづらいって話でしょ?

C ならマクロ使ってもケチ付かないし、
void * をキャストなしで代入しても何も言われない。

ま、どっちでもいいけど。
618デフォルトの名無しさん:2001/06/03(日) 08:05
faqじゃん。
619デフォルトの名無しさん:2001/06/03(日) 08:07
>>618
だな。
620デフォルトの名無しさん:2001/06/03(日) 11:35
>>618-619
百も承知でやってんじゃないの?
621デフォルトの名無しさん:2001/06/03(日) 13:01
faqコピペ厨は逝ってよし
622デフォルトの名無しさん:2001/06/03(日) 23:46
623デフォルトの名無しさん:2001/06/04(月) 00:45
if (a < b < c)
やっちまったよ・・
624デフォルトの名無しさん:2001/06/04(月) 01:24
>>623
逝ってください。
625デフォルトの名無しさん:2001/06/04(月) 02:33
if (a << b << c)
さらに意味不明に ....
626デフォルトの名無しさん:2001/06/04(月) 02:45
a,b,cのそれぞれの型と演算子のオーバーロードによってはあるいは…
627デフォルトの名無しさん:2001/06/04(月) 04:53
>>623
>>625
何も問題ない。正常に動作するじゃん。どこがおかしいの?
628デフォルトの名無しさん:2001/06/04(月) 05:09
>>627
コンパイル通る=正常に動作、ではありません。
逝ってらっしゃい。
629パズル:2001/06/04(月) 08:26
「a < b < c」が常識通りの意味を持ち、
かつ、普通に比較演算子を使うこともできるように
演算子オーバーロードせよ
630デフォルトの名無しさん:2001/06/04(月) 09:39
>>627
キミの頭
631デフォルトの名無しさん:2001/06/04(月) 17:12
>>629
組込型に対する演算子はオーバーロードできないぞ。
その辺はどうする?
632デフォルトの名無しさん:2001/06/09(土) 23:32
---------------------------------------------------------------
633デフォルトの名無しさん:2001/06/10(日) 01:22
>>631
USOでしょ?
634デフォルトの名無しさん:2001/06/10(日) 05:17
CやC++の'<'は左結合の2項演算子だから
((a < b) < c)

(bool < c)

bool
635デフォルトの名無しさん:2001/06/10(日) 10:39
Cにboolは無いでしょ。
>> 627
脳のデバグーしてください。

hoge:~/tmp$ cat fuge.c
#include <stdio.h>
int main(){
int a=-3;int b=-2;int c=-1;
if(a<b<c)puts("OK");
else puts("Error");
return 0;
}
hoge:~/tmp$ cc fuge.c
hoge:~/tmp$ ./a.out
Error
hoge:~/tmp$
636デフォルトの名無しさん:2001/06/11(月) 01:46
>>635
新しいCの規格ではboolが追加されていたような。
637デフォルトの名無しさん:2001/06/11(月) 05:52
>>636
あそうなんだ?
#define BOOL int
でしたいつもいついつまでも。
typdefの方いるのかな?
638637:2001/06/11(月) 05:53
typdef (自分でプッ
639デフォルトの名無しさん:2001/06/12(火) 17:21
今、見てるCのソース、ほぼすべての関数が void 型。
プロトタイプ宣言は必要なさそうなのでしてません、の意味ってこういう事だったとは!?
640デフォルトの名無しさん:2001/06/12(火) 17:28
>>636
_Bool だな。
641デフォルトの名無しさん:2001/06/12(火) 18:03
>>633
アトラン、イイ!
642デフォルトの名無しさん:2001/07/13(金) 19:10
  End If
  End Select
  End If
  End If
  End If
  End If
  End If
  End If
  End If
  End If
  End With
 Next i
643デフォルトの名無しさん:2001/07/23(月) 12:26
goto 1;
644デフォルトの名無しさん:2001/07/23(月) 21:29
switch(hoge)
case a : switch(moge)
case b : switch(nyo)
case c :…

いや、俺が書いたんだが(w。
645デフォルトの名無しさん:2001/07/26(木) 07:04
「Javaの将来性」
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=986658903
の119より。

>正常系 String、レアケースで Integer や String[], Exception が
>入るコレクションなんて メンテできません。
>Object を VARIANT 型と勘違いしている VB 厨房死んで。

愕然とするしかないよ、、、、。
646デフォルトの名無しさん:2001/08/10(金) 19:33
あげー
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCK_NAME "/tmp/socket"

main(){
struct sockaddr_un addr;
int fd, len;
char buf[1024];

ret = 1024;

if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
perror("socket");
exit(1);
}

bzero((char *)&addr, sizeof(addr));

addr.sun_family = AF_UNIX;
strcpy(addr.sun_path, SOCK_NAME);

if (connect(fd, (struct sockaddr *)&addr,
sizeof(addr.sun_family) + strlen(SOCK_NAME)) < 0){
perror("connect");
exit(1);
}

while (1) {
write(fd, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 1024);
}

close(fd);
exit(0);
}
648デフォルトの名無しさん:01/09/18 13:52
え?
649デフォルトの名無しさん:01/09/18 19:58
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

読みにくいから

"aaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaa"
と書いてね
お願い
なげー
651デフォルトの名無しさん:01/09/26 16:01
iが32bitのintで

if (i & 0x80000000)

if (i < 0)

どーなんだろうか。
>>651
あえてあげるほど長くはないよ
654名無しさん:01/09/27 18:34
DIM A(1000) as Integer,i as integer
for(i=0;i<1000;i++){
A(i) = i * i;
__asm{
mov cx,0
mov ax,A[cx]
shr ax,1
mov A[cx],ax
}
}
やっぱ ABC言語やね
655デフォルトの名無しさん:01/10/03 01:42
組み込み系にて
stdio.hとかは使用しない

#define UCHAR unsigned char
#define USHORT unsigned short
#define ULONG unsigned long
#define LENUCHAR 1 /* UCHARデータバイト数*/
#define LENUSHORT 2 /* USHORTデータバイト数*/
#define LENULONG 4 /* ULONGデータバイト数*/
#define NULL 0 /* NULL */
#define NULLP 0 /* NULLP*/
#define ALLF -1 /* ALL F*/
#define ZERO 0 /* ZERO*/


NULLPはポインタに使用しています。
が、p = (void*)NULLPなんてのも...。
警告されるからなんでしょうけどねぇ。
>>655
キミのソースは削除に値します
つまり、クソってことさぁ!
>>655
少なくとも 型は typedef にしろよ……
658デフォルトの名無しさん:01/10/03 11:43
Private Sub tmrMove_Timer() '100msごとにタイマ処理

shpButtai.Left = shpButtai.Left + 50 '左から右に50ずつ移動
shpButtai.Top = shpButtai.Top + 50 '上から下に50ずつ移動

End Sub
Private MouseX 'カーソルのX座標
Private MouseY 'カーソルのY座標

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

MouseX = X 'カーソルを動かすたびにカーソル位置を憶える
MouseY = Y

End Sub

Private Sub tmrMove_Timer()

'虫の移動量を計算
Dim MoveX 'X方向の移動量
Dim MoveY 'Y方向の移動量
Static ButtaiX '物体情報X
Static ButtaiY '物体情報Y

If MouseX > ButtaiX Then MoveX = 1 'X方向の移動量を出す
If MouseX < ButtaiX Then MoveX = -1

If MouseY > ButtaiY Then MoveY = 1 'Y方向の移動量を出す
If MouseY < ButtaiY Then MoveY = -1

ButtaiX = ButtaiX + MoveX * 10 '物体の位置+移動量*移動速度10倍
ButtaiY = ButtaiY + MoveY * 10

shpButtai.Left = ButtaiX 'Shape1の移動
shpButtai.Top = ButtaiY

End Sub

Private MouseX 'カーソルのX座標
Private MouseY 'カーソルのY座標

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

MouseX = X 'カーソルを動かすたびにカーソル位置を憶える
MouseY = Y

End Sub
659デフォルトの名無しさん:01/10/03 16:53
>>657
構造体だけ集まっているヘッダはこうなってたヨ

typedef unsigned char uchar;
typedef unsigned short int ushort;
typedef unsigned int uint;
typedef unsigned long ulong;

typedef struct common_t{
uint field;
uint bufID;
void *dataaddress;
void *nextaddress;
}common, *pcommon;

それからこんなの使ったこともないらしい。
#ifdef XXXX_H
#define XXXX_H
#endif

さらにほとんど1ファイル1関数みたい。
660デフォルトの名無しさん:01/10/03 17:15
とりあえず
俺の周りには
PCやらオーディオなんかの
コードがウザくってしょうがない
>>660
はいはい。わかったからsageてね。
>>660
ひきちぎっとけ。
663デフォルトの名無しさん :01/10/05 07:24
Cでmainを最後に書いてあるコードを見たことがある。
なんでこんなことを?って思ったけど、こう書くと
関数定義が不要になるんだね。
けど、ソース追いかけるの大変だった。
664sage:01/10/05 07:36
>>663
それは常識だろ?
でもK&Rとの互換性必要ないならプロトタイプ宣言書くほうが良い。
あと、書籍の簡単なサンプルなんかもmain最後で書いてたりする。
665チビ女:01/10/05 12:59
>>663
読みにくいのは慣れの問題なんじゃないの?
PASCALなんかだと、呼び出し側のルーチンを下に書く文法だけど、
読みやすいって言ってる人は多い。
666デフォルトの名無しさん:01/10/05 13:17
>>663
モジュールの長さによるよな。
3000行くらいあるとたどり着くまでに見る気がなくなる
667デフォルトの名無しさん:01/10/05 17:02
line = no1;
// ↑FlushへのWrite関数に10進パラメータを入れると内部
// で16進にして書き込むので、問題ない。

驚愕のコメント。一気に修正する気なし。
身元、バレるかな・・・?
>>663 Cなら1モジュール1関数にしとけ
>>668
糞の典型
670判定をお願いします:01/10/05 23:22
Cです。
コーディング規約でgotoが使えません。

execute = true;

if( execute == true ){
ret = f1();
if( ret == 不正 ){
execute = false;
}
}

if( execute == true ){
ret = f2();
if( ret == 不正 ){
execute = false;
}
}

if( execute == true ){
ret = f3();
if( ret == 不正 ){
execute = false;
}
}



if( execute == false ){
不正なことに対する終了処理
}

return;
671デフォルトの名無しさん:01/10/05 23:22
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
Del厨断末鬼の叫び!!!
拙い言いがかりからRubyを必死に煽ろうとしたDel厨が逆襲を受けて死亡!
理論的にDelphiはRubyの足元にも及ばないことが証明された!!!
「Ruby撲滅スレ」
http://piza2.2ch.net/test/read.cgi/tech/1001125342/
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
>>670
規約とはよりよいコーディングのためと思われ
でも規約が絶対視されることはよくある

スレ違いsage
>>670 全体を関数にして処理を終了したいところで return するてのはどうだい?
goto よりも見通しがいいと思うよ。
しかし、大きなお世話だな>goto禁止
674デフォルトの名無しさん:01/10/06 00:28
>>670
こんな感じ?

ret = f1() !=不正 && f2() != 不正 && f3() == 不正;

if (!ret) {
不正な場合の処理
}

いやなコードだ。
675デフォルトの名無しさん:01/10/06 17:38
身元がばれそうだが…

コーディング規約

・移植性を高めるためintではなくint32_tを使う
・'\0'や'0x00'はNULLで統一する。
・関数名と左括弧はスペースをあけない。
・returnはreturn (), exitはexit ()と記述する。

main(){
int32_t a;
int32_t b;
u_int32_t c;
char d[31+1];

memset(d, NULL, sizeof(d))

if( a < b){
exit (a);
}
exit (b);
}
676デフォルトの名無しさん:01/10/06 17:54
>>670

{
 if( f1()==不正 );error_syori();return}
 if( f2()==不正 );error_syori();return}
 if( f3()==不正 );error_syori();return}
}

error_syori()
{
 不正なことに対する終了処理
}
とか
{
 do{
   if( f1()==不正);break}
   if( f2()==不正);break}
   if( f3()==不正);break}
  return;
 }while( 0 );
不正なことに対する終了処理
}
じゃ駄目?gotoは見にくいから使わないよ。
677デフォルトの名無しさん:01/10/06 17:55
break} > break;ね
>>676
なかなかイカシているね!でもネタだからボツ
そういうのを真面目に書いたのを見たい。
アフォPGのソースを拝借してきて。
679デフォルトの名無しさん:01/10/06 18:00
>>678
どこがおかしいんだろ??
仕事でこういうコード書いてますが?
680はいはい:01/10/06 18:04
{
 if( f1()==不正 ){error_syori();return;}
 if( f2()==不正 ){error_syori();return;}
 if( f3()==不正 ){error_syori();return;}
}

error_syori()
{
 不正なことに対する終了処理
}
681デフォルトの名無しさん:01/10/06 18:05
{
 do{
   if( f1()==不正) break;
   if( f2()==不正) break;
   if( f3()==不正) break;
  return;
 }while( 0 );
不正なことに対する終了処理
}
682デフォルトの名無しさん:01/10/06 19:27
>>675
C++ なら確かに NULL でも問題ないのですが、
別に NIL だとか作って使った方がいいのでは、
と思うんですけどねぇ...。
675 さんの問題ではないので、
ここで言ってもどうにもならないのでしょうが。
683デフォルトの名無しさん:01/10/06 19:30
if(f1() == 正しい &&
f2() == 正しい &&
f3() == 正しい) return;

不正なことに対する終了処理
684デフォルトの名無しさん:01/10/06 19:42
>>675
>・移植性を高めるためintではなくint32_tを使う
移植性が必要なところ以外でも使うの?
685デフォルトの名無しさん:01/10/07 23:42
Private m_nDrawFlag As Boolean '描画スイッチ
Private m_nInitX As Integer '描画開始位置(X座標)
Private m_nInitY As Integer '描画開始位置(Y座標)

Private Sub pctAnime_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

'左ボタンを押されたら描画開始
If Button = vbLeftButton Then
m_nDrawFlag = True '描画スイッチオン
m_nInitX = X '描画開始位置を憶える
m_nInitY = Y
pctAnime.PSet (m_nInitX, m_nInitY), RGB(0, 0, 0) '最初の点を打つ

'右ボタンを押されたらクリア
ElseIf Button = vbRightButton Then
m_nDrawFlag = False '描画スイッチオフ
'白で塗りつぶす
pctAnime.BackColor = &HFFFFFF ‘pctAnime.Cls としても良い
End If

End Sub

Private Sub pctAnime_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

'描画中なら線を描く
If m_nDrawFlag = True Then
pctAnime.Line (m_nInitX, m_nInitY)-(X, Y), RGB(0, 0, 0) '線を描く
m_nInitX = X '次の開始位置を保存
m_nInitY = Y
End If

End Sub

Private Sub pctAnime_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

'描画中なら最後の線を描く
If m_nDrawFlag = True Then
pctAnime.Line (m_nInitX, m_nInitY)-(X, Y), RGB(0, 0, 0) '線を描く
m_nDrawFlag = False '描画スイッチオフ
End If

End Sub
686デフォルトの名無しさん:01/10/09 22:52
>>683
a==不正 と !(a==正しい) とは同値ではない
687683:01/10/10 23:50
>>686
スケマティックな表記にそんなケチをつけんでも。
688デフォルトの名無しさん:01/10/16 18:44
double e(){
 int i,n=1;
 double e=0;
 for(i=1;i<13;i++){
  n*=i;
  e+=1/n;
 }
 return e;
}

氏んでくれ。
>>675
> ・関数名と左括弧はスペースをあけない。
> ・returnはreturn (), exitはexit ()と記述する。
矛盾してる。
690デフォルトの名無しさん:01/10/16 20:48
>>689
それ関数じゃねえし。
>>690
exit()は関数
#define S10_09 136
#define S10_09_01 137
#define S10_09_02 138
#define S10_09_03 139
#define S10_09_04 140
#define S10_09_05 141
#define S10_09_06 142
#define S10_09_07 143
#define S10_09_08 144
#define S10_09_09 145
#define S10_09_10 146
#define S10_09_11 147
#define S10_09_11_01 148
#define S10_09_11_02 149
#define S10_10 150
#define S10_10_01 151
#define S10_10_02 152
#define S10_10_03 153
#define S10_10_04 154

こんなのがあって、S10_10_03_01 になりそうなものを追加したいんですけど、
私はどうすればいいのでしょう?
153.1
>>659
すまん、ふるいのを掘り起こす.
#ifdef でなくて、#ifndef だろ。
>>692
enumで書き直せ
>>675
・'\0'や'0x00'はNULLで統一する。
ネ,ネタ? C++ではこれでもいいんだっけ?

・移植性を高めるためintではなくint32_tを使う
I/Oポートを叩く時とか,32ビットであることが必要な個所には
必要だろうが,関数の返り値で0か1か判ればいい個所ならintで
いいんじゃない?
697692:01/10/23 17:50
>>695
1からずっと続いてそこまできてるんよ?
>>697
enum使え
699デフォルトの名無しさん:01/10/23 23:43
AfxThrowMemoryException();
// ↑バカのひとつおぼえ
ななひゃくう〜!
>>698
enum萌え
define萎え
>>697 (692)
プログラマなら
s/#define *([^ ]*) *[0-9]+ *$/\t\1,/;
くらいのことすれ。
>>703 禿同。
しかし「エディタに置換コマンドくらいないのか?」と言っとかないと
通じない恐れあり。
705デフォルトの名無しさん:01/11/21 18:58
グローバル変数で、
int a;
int b;
int c;
途中略
int x;
int y;
int z;
というのを見た事がある。
しかも、半分以上は未使用。
706デフォルトの名無しさん:01/11/21 20:04
>>705
名機PB-100で、育った人なのかも。
/* 日時 */
strcat(strcat(strcat(strcat(strcat(yyyy,mm),dd),hh),mi),ss);

えーと、sprintfを使ってください。
708デフォルトの名無しさん:01/11/21 23:27
char dat[255]; <-- グローバル

data_conv( 3 );

//---------------
void data_conv( int a )
{
char str[255];
strcpy( str, &dat[3] );
if( str[0] != 0x20 ) return;
}

激しく謎だった。
>>708
aは何処いったの?
710 :01/11/21 23:31
int *a;

*a = 0;

printf("%d",*a);

うちの大学の授業のサンプル。
追求したら講師二人が

「こんなことしてはいけない。」
『環境によっては大丈夫だ。』

ともめていた。

使ってるのはgccなんだけどなぁ・・・。
711デフォルトの名無しさん:01/11/21 23:39
>>708
wait?
きっと、すごいシビアなマルチスレッドなプログラミングで‥‥
プログラマがマターリするために書いたんだろうね
712デフォルトの名無しさん:01/11/24 13:46
han age
713デフォルトの名無しさん:01/11/24 13:49
>>710
すいません、そのコードの何が悪いのでしょうか。

int *a;
*a = 0;
printf("%d",*a);

なんの問題もないように感じますけど。
>>713 実行してみればわかるよ
*a= 0;の行でa がどこ指してるのか不定なのに代入してるからCore吐いて死ぬよ。

実行結果
[12:~]$uname -a
CYGWIN_ME-4.90 *** 1.3.4(0.47/3/2) 2001-11-07 13:36 i586 unknown
[13:~]$./bad.exe
Segmentation fault (core dumped)
[14:~]$
716715:01/11/24 14:30
あ、上のは >>713 ね。
MSDOSなら
718デフォルトの名無しさん:01/11/24 22:28
職場のバカリーダーに >>710 見せたら
713と同じく「何もおかしくないだろ」と言ってた・・
719デフォルトの名無しさん:01/11/24 23:14
>>30ってなんでダメなの?
720怒っている初心者:01/11/24 23:22
>>719
for( int i = 0; i < 10; i++)

ならいいのかよっ!!教えろよ!!なんでだよ!!
>>720
メモ帳
722デフォルトの名無しさん:01/11/24 23:48
>>720
#include <stdio.h>
int main(void){
   for( int i = 0; i < 10; i++)
     printf("%d",i);
}
これでなんの問題も無くコンパイルされ実行したら0123456789を出力されて終わったが。
なにが問題あるのだろうか?
>>721
ハ?メモ帳とは?
724デフォルトの名無しさん:01/11/25 01:01
素直にi++って書け、ってことでは
それだけで糞扱いなのか
726デフォルトの名無しさん:01/11/25 01:27
process1(int type){
if(type==TYPE1_A || TYPE1_B){
process2(TYPE2_A)
}else if(type==TYPE1_C){
process2(TYPE2_B)
}
と10個くらい続く
process2(int type){
if(type==0){
....
}else if(type==1){
....
}
と5個くらい続く

全くバカは困る
バイトだから,指摘できないんだよね
これ見てたら、気づいてくれ
まずはてめーでドキュメント作りやがれ
よくよく見れば,おまえたいしてコーディングしてないわりには
わかりにくい巨大クラスつくってるんじゃねーよ
virtual一個も無いのに、protectedなんてつくるなよ
そもそも,継承なんてできねーんだってそんなクラスは

っていうか、要素数0からreallocして、
だいたい要素数500まで行くんだけど、
もしかして、newの使い方がわからんのか?

最後に聞きたい
メモリ開放するためのマクロのメリットは何?
ちなみに、reallocした部分にif(p)はないでしょ?
(俺の勘違いか?reallocなんて使った事ないからな・・・)

とりあえず,些細な仕様変更で
膨大な量の書き換えが必要なもん作らないでくれ
だから,君の担当部分でバグ習性不可能になって、
俺が肩身の狭い思いをするんだよ
俺に言ってくれれば,さっさと直してやるって
それにしても大学で何を勉強してるのか疑問だ

最後に
これを見て心当たりがあったら、とりあえず誤れ
かなりむかついてるんだよ
最後に恥をかくのは君だからね
727デフォルトの名無しさん:01/11/25 01:29
あー,これじゃあ気づかないだろーな・・・
よくありがちなパターンだもんな

これに当てはまる人っていっぱいいそうだから、
はやめに誤った方がいいっすよ

クソコードの恨みは結構大きい
>726
>とりあえず誤れ
既に誤ってるだろう。要求すべきは謝ることだ。
729デフォルトの名無しさん:01/11/25 02:28
なるほど、サンク
おい、沈むな、沈むな。
731デフォルトの名無しさん:01/11/25 03:30
コードもだけど、コメントがなあ。
通信系だが「CCH」 日本語で書くと制御チャネルなのだが、
今やっているソースの引き継ぐ前の人はこのCCHを

制御CCH
制御CHチャンネル
Cチャネル
制御チャンネル
CCチャネル

など、処理ごとに表現が変わるから理解するの大変なんだよなあ
しかも全角半角使い分ける?し、制御が生魚になってて爆笑させてくれるし
732デフォルトの名無しさん:01/11/25 04:01
上司が、自分の過去に書いたソースがあるのでそれを参考にして始めろ。
というので見てみたら、いきなり

#define UINT unsigned int
#define ULONG unsigned long

とか書いてんの・・・。
733デフォルトの名無しさん:01/11/25 07:33
define death蚊・・・
734デフォルトの名無しさん:01/11/25 09:02
>>732 typedef を使えということかい?
でも、そのケースで define だと実害があるケースを思いつかなかった
735 :01/11/25 09:11
>>732
いけないの?
736デフォルトの名無しさん:01/11/25 09:25
ざっと読み返したけど、このスレ、只の八つ当たりが混じってる気がする。
何が悪いのか説明してないのは書き捨てのつもりか?>>732
>>726モナー
>>726
バイトに長々と影で文句を言ってる奴の方が人間的に問題あると思うが

指導してやれよ
739726:01/11/25 11:47
あ、俺がバイトね
一応、上司って事になると思うから、
あまり大きい事はいえないんだよね
特に,「あんたのコード糞」なんてね(w

今後の予定とかも全然言ってくれないし、
いつまでに仕上げろとも言わないし、
どういうプログラムを作るのかも,曖昧にしか説明できないし、
(アウトプットのインターフェースのみ)
プログラム作るための資料も、全然足りてないし・・・
いったいそれだけの情報で、俺はどう振舞えばいいの
途中で相談の機会も作ってくれないし、
そんなクリティカルな部分をコーディングさせないでって思う。

とりあえず,再利用できるコードがひとつも無いし
まあ本人的には,再利用できると思ってるっぽいけど
クラスのメンバとかが絡んでくる関数なんて,再利用できません。
デザパタの本も持ってるだけじゃなくて、使って欲しいな・・・
ポインタがよくわかって無さそうだから無理っぽいけど(w

allocの開放については、よく知らないけど
allocを使うメリットってなんだろ
4Gの仮想空間だから確率的には低いけど、
長時間動かすプログラムだからやっぱり危険だと思うんだよね
そこでメモリ確保できなかったら、プログラム止まっちゃうし
まあ,俺は体感できなくても高速なプログラムを書く方が好きだし
allocなんて使う事はないだろーなー
まあ、allocっていうかvector作る事はよくあるけど
740デフォルトの名無しさん:01/11/25 12:19
>>739は 相変わらず謎だ。
説明能力を見る限り739が間違っている可能性がある。
741デフォルトの名無しさん:01/11/25 12:25
>>726
>これを見て心当たりがあったら、とりあえず誤れ

誤りワロた
742デフォルトの名無しさん:01/11/25 12:27
>>739
>そこでメモリ確保できなかったら、プログラム止まっちゃうし

ちゃんと確保できたかの判断ぐらい入れろよ・・・ポインタ以前の問題だぞ、おまえ
743デフォルトの名無しさん:01/11/25 12:32
エラー処理を全く行わないプログラムスタイル(ビジネススタイルか?)
もあるよ。
744_:01/11/25 12:38
>>743
止まるっしょ。それ。
745デフォルトの名無しさん:01/11/25 12:49
>>742
マルチスレッドじゃないので、どうしようもなくなります

>>740
確率的には低いですね
向こうはvirtualが使えません
オブジェクト指向ができません
アルゴリズムを知りません
データ構造を知りません
>>740よ。
「・・・謎だ」とか「・・・可能性がある」なんて言う婉曲な
言い回しをするのは、本人のためにも良くないと思われ。
率直に「お前がヴァカなんだよ(藁」といってやれ。

>>745
いいえ、確率的には高いですね
貴方は例外が使えません
自分の主張を他人に論理だてて説明する事ができません
動的なメモリ確保の利点を知りません
自分の書いた文章を見直すという事を知りません
上司も上司なら、バイトもバイト、って感じだな。
748745:01/11/25 14:50
>>動的なメモリ確保の利点を知りません
はて、new(malloc)とreallocの比較なんですけど?
スタック領域を増やして,ヒープを使わないなんておろかな事は
しませんが・・・・

>貴方は例外が使えません
ヒープにメモリが確保できないというのは、
例外以前の問題ですが,理解できますか?
ちなみに私の書いたコードに関して言えば、
try/catchはありますが。
ベースの部分にtry/catchが無いのでどうしようもないです。
まあ,そんな事は設計フェーズで決める事だと思うし
そのへんのポリシーを説明してもらえなきゃ,何もできない

>自分の主張を他人に論理だてて説明する事ができません
まあ,コンピューターに対しては、
自分の考えを論理的に説明しなきゃならんけど
普通、人に対してはそんな事できないよな・・・
って俺の文章を批判してるのやら、
上司に自分の主張をしろって言ってるのやら
ようわからん奴だな

>自分の書いた文章を見直すという事を知りません
はぁ?


他人の文章を読んで理解できなかった場合、
2つのケースが考えられます。
1つ目は、書き手がバカな場合
2つ目は、読み手がバカな場合
もう一度検討なさってみてはどうでしょうか?

で、上記の4点から
>確率的には高いですね
といってるわけ?
すごい論理的だね(w
君もすごいコード書きそうだね
749デフォルトの名無しさん:01/11/25 15:07
746じゃないが、あの文章から

>はて、new(malloc)とreallocの比較なんですけど?
>スタック領域を増やして,ヒープを使わないなんておろかな事は
>しませんが・・・・

を読み取れというのは、傲慢だと思うぞ。
>>736はtypedefの代わりにdefineを使った時の実害を勉強しておく事。
>>すごい論理的だね(w
>>君もすごいコード書きそうだね

君はすごい仕様書書きそうだ.
>>748
>で、上記の4点から
>>確率的には高いですね
>といってるわけ?
>すごい論理的だね(w

推論の進め方(及び文の構造)自体は>>745から借用したんだが、何か?

ついでにいうと、自分の書いた文章を見直す癖をつけておけば、
謝った書き方をする事も無くなると思うが・・・
753仕様書無しさん:01/11/25 16:19
>他人の文章を読んで理解できなかった場合、
>2つのケースが考えられます。
>1つ目は、書き手がバカな場合
>2つ目は、読み手がバカな場合

1つ目に1票入れておきます。
754経歴書無しさん:01/11/25 16:37
public boolean DBに接続するぞ() throws 接続できないぞ例外
{
}
allocの説明だけ判ったけど、最初のコードの説明その他が無いじゃん。
説明求められて他の例を列挙しちゃうし・・・・。
756デフォルトの名無しさん:01/11/25 17:51
>>755
ポリモーフィズム知らんの?
うちの会社には、C++つかっててポリもーフィズム使えないようなアホはいない
やっぱり恵まれてる方なのかも

>ついでにいうと、自分の書いた文章を見直す癖をつけておけば、
>謝った書き方をする事も無くなると思うが・・・
「オマエモナー」というツッコミの余地を残してるのは
やっぱり意図的なのかな?
728の文章読んだとき、笑ってキーボードが水没しかけたよ
もしかして,プロか?
文章の書き方にセンスを感じる
まあ,コーディングに関しては慎重にやっても
エラーがでるよな
VCのエラーメッセジはちょっと痛い

>推論の進め方
全然違う気が・・・
バイト君は、裏づけをしてる一方で
752はそれを否定して、かつ自分の意見を通したいわけでしょ?
そもそも、そこは論理的に書いてるんじゃないっしょ?
プレゼンとかあまりしない系の職業なのかな
また妙なのがでてきたぞ。
なぜそこでポリモフィズムかね。
デムパ君だったか・・・。
759デフォルトの名無しさん:01/11/25 18:25
まあ、745はバイトふぜいで偉そうにするなって感じだね。
できるバイトであっても所詮バイトはバイトでしかないんだよね。
まとめ:

             マ 板 で や れ
反論:

              マ 板 に 押 し 付 け る な
763デフォルトの名無しさん:01/11/25 18:45
提案:

               じ ゃ あ モ 。 板 で や れ
見物:

               シャア版が正解。
765デフォルトの名無しさん:01/11/25 18:56
定説:

             Rubyサイコー

 
なんでこういう状態で上がってるの?
>>766
バカが多いからだろ
明らかに一人でやってるよな・・・・
よっぽど退屈だったのでは?
すくなくとも二人いる。俺はシャアだけ。
>バカが多いからだろ
>明らかに一人でやってるよな・・・

すげーーや。
多数でかつ一人とは・・・。
770デフォルトの名無しさん:01/11/25 21:16
「ちょっと一服」

>>726以降、この一連のスレの流れの中で
非常に個性的な意見をお持ちの方が一人いらっしゃいます。
しかも困った事に、その人には自作自演の傾向があるようです。
さぁ、皆でどれが御当人のレスか推理してみましょう!

その人の特徴
1.文末に"。"を打たない傾向が強い。
2."、"と","を混在して使用する。
Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞R
ubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Ru
byは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rub
yは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Ruby
は糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは
糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞
Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞R
ubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Ru
byは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rub
yは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Ruby
は糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは
糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞
Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞R
ubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Ru
byは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rub
yは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Ruby
は糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは
糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞
Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞R
ubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Ru
byは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rub
yは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Ruby
は糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは
糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞
Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞R
ubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Ru
byは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rub
yは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Ruby
は糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは
糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞Rubyは糞
つまらんテクスチャーだな。
>>771
Rubyでこういうプログラム作って、
「俺もプログラマーだぜ!」とか思ってるんでしょうね。
イタイというより哀しくなってきた・・・
>>773
「Rubyは糞」をルビ房が書くかねえ?
Ruby叩いている奴ウザすぎだな。
goto 12;5:goto 8;2:goto 3;6:goto 7:9:goto 10;
3:goto 9;4:printf("ゴール\\n");goto 6;12:goto 6;
7:goto 13;13:goto 9;10:goto 5;7:goto 4;8:;
777デフォルトの名無しさん:02/01/08 05:32
typedef int SEISUU;
typedef short MIZIKAISEISUU;
typedef long NAGAISEISUU;
typedef char MOZISEISUU;
typedef float HUDOUSYOUSUUTEN;
typedef double NAGAIHUDOUSYOUSUUTEN;
...(以下略)

正直、悲しかった。
FUDOUじゃないのか?
>>778
よく見ろ。全部訓令式だ。
ローマ字使うのはまだいいが訓令式にするか標準式にするかくらい
統一してくれ…
つーか漏れの仕事先で統一されてるところ見たことないんですけど。
>>777
それ書いたやつはプログラム書くなという感じだな。
そっこークビでいいし。