1 :
仕様書無しさん :
2001/08/06(月) 22:34 この会社辞めようと思ったソースコード。 プログラマとして幻滅するソースコード。 プログラマを悩ませるソースコード。 をつらつらと綴っていって頂戴。
2 :
仕様書無しさん :2001/08/06(月) 22:36
int main() { /* process... */ return 1; }
3 :
仕様書無しさん :2001/08/06(月) 22:41
for (i = 0; i < n; i++) { switch (i) { case 0: fnc_0(); break; case 1: fnc_1(); break; ... } }
4 :
仕様書無しさん :2001/08/06(月) 22:44
エラーがエラーコードでメッセージだけでは分からないよー。 if ((fp = fopen(filename, "r")) == NULL) { fprintf(stderr, "EF-3324-672\n"); ... }
5 :
仕様書無しさん :2001/08/06(月) 22:47
変数の受け渡しが99%グローバル変数。 インデントもろくにしてない。 上司が書いたソースなのだが、仕様書もろくにないのに引き継ぎさせられた。 そして現在仕様書を書かされている。
6 :
仕様書無しさん :2001/08/06(月) 22:47
public class Hoge { protected Hoge() {} public getInstance() { return new Hoge(); } } Singleton じゃないのか…
7 :
仕様書無しさん :2001/08/06(月) 22:52
C 屋じゃなくて、DB屋(Oracle) なんでちょっと場違いかもしれんが、 今の仕事で 無意味なサブクエリー&動的SQL使いまくりの1000行近いプロシージャーを かなりの数残していったやつがいるんだけど(無論、仕様書なし)、 そいつのソースのメンテを振られたらその場で辞めるつもり。
8 :
仕様書無しさん :2001/08/06(月) 22:59
ツールレベルのプログラムって仕様書作っていない奴が多いね。 エイヤー!で作ってクーロンに仕込ませて忘れた頃に障害発生。 すでにプログラマはいない。
9 :
仕様書無しさん :2001/08/06(月) 23:03
gets(buf); 良くあるよ。
10 :
仕様書無しさん :2001/08/06(月) 23:06
strncpy(s, " ", 256); たぶん文字列sを初期化しようとしているだと思うんだけど・・・ こんなのがいっぱいある。
11 :
仕様書無しさん :2001/08/06(月) 23:10
char *s1 = malloc(256); char *s2 = malloc(256); s1 = "s1 is string"; s2 = "s2 is string"; ポインタが分かっていない典型的なコード。
12 :
旅人プログラマ :2001/08/06(月) 23:16
全てのSQLクエリーにWhere文がなく帰ってきた結果を IFで判定しているプロジェクトがあったのだが、 その時の担当曰く「条件が変わってもSQL文を変更しなくて済む」 と言う事らしい…。
13 :
仕様書無しさん :2001/08/06(月) 23:25
IDENTIFICATION DIVISION.
14 :
仕様書無しさん :2001/08/06(月) 23:25
>>12 SQL変えるついでに、担当も替えてもらえ。
15 :
仕様書無しさん :2001/08/06(月) 23:33
main関数が8000行
16 :
仕様書無しさん :2001/08/06(月) 23:56
CString val1 = "string1"; CString val2 = "string2"; int i; for(i = 0 ; i < val2.GetLength() ; i++){ val1 += *((LPCTSTR)val2 + i); } val1 += val2;がやりたかったらしい・・・。
18 :
仕様書無しさん :2001/08/07(火) 00:06
UINT flg; (略) if( flg > 0){ 略 } else{ アホか(笑)
19 :
仕様書無しさん :2001/08/07(火) 00:14
ファイルが開けなくても続行。 メモリが確保できなくても続行。 エラー処理がまったく施されていないソースを 渡されたときにはさすがにびびった。 「エラー処理付けなくてもいいんですか?」って聞いたら 「エラーになることはありえないからいいよ。。。 もしだめだったら勝手に止まるからいいよ」って言われた。 そりゃコアも吐くわー。。。
20 :
18 :2001/08/07(火) 00:18
あ, if(flg < 0) だった。 俺もアホだ
21 :
仕様書無しさん :2001/08/07(火) 00:42
>>20 ほっとしたよ。
18のナニがアホなのか理解できん自分がアホかと思った。
でも18のままでも十分あほだよ。
/* Copyright (C) 1984, 1989 Free Software Foundation, Inc.
このスレ笑える
void func1(void) { : func2(); } void func2(void) { : func3(); } void func3(void) { 以下鬱
関数名、変数名が全て日本語で読めると発見したとき。
29 :
仕様書無しさん :2001/08/07(火) 22:42
20以外を判定するために if(flag<19 || flag>=21){ } マジです。 調べてみましたがflagには整数しか入りません。 アホか!お前はアホか!!
30 :
仕様書無しさん :2001/08/07(火) 22:50
31 :
仕様書無しさん :2001/08/07(火) 22:54
32 :
旅人プログラマ :2001/08/07(火) 22:56
>>14 いや条件変わる前に職場変えるよな…
精神衛生上その方が楽ですし
>>25 他人事ですから笑えるんですよ…(藁
33 :
仕様書無しさん :2001/08/07(火) 22:57
>>31 あ、ごめん。怒りにまかせて書いたから間違ってた。
>>30 マジです。
ちなみに5=29で、今度は別のソースの話。
請負先の上司->プログラム初めての初心者->俺
と回ってきたらしい。
早く別の請負先に回してくれー!!
34 :
仕様書無しさん :2001/08/08(水) 00:50
TCP接続の「上」で、SEND・ACKメッセージをわざわざ やり取りするアホオヤジ。 分かってないのに偉そうな奴で、給料おいらの3倍くらい らしい。とっとと氏んでくれ…
35 :
仕様書無しさん :2001/08/08(水) 02:32
>>34 受け取ったこと(TCP上のACK)と処理したことが違うということで
わざわざつけることもある。あるいは状態や内容的にOKかNGかとか。
HTTPだって、GETに対してOKだったり404だったり500だったり
という事とは別のことだよな。
36 :
4年目 :2001/08/08(水) 02:35
>>34 アプリケーションプロトコルでの確認は必要ないとでも?
37 :
仕様書無しさん :2001/08/08(水) 05:41
// Author : <社名> SUPER * 作った上司に、あとで「* って何ですか?」と聞いたら「スターだ」と言われた。 聞くんじゃなかった...
38 :
学生 :2001/08/08(水) 06:49
職場ではないが、教授が書いていたプログラム i=0; while (1){ if ( i != 0 ) break; /*処理...*/ } 普通にwhile文使えよ…
39 :
もうひとつ :2001/08/08(水) 06:58
とあるパズル問題を解くプログラム for(i1=0; i1<N; i1++) for(i2=0; i2<N; i2++) for(i3=0; i3<N; i3++) for(i4=0; i4<N; i4++) for(i5=0; i5<N; i5++) for(i6=0; i6<N; i6++) for(i7=0; i7<N; i7++) for(i8=0; i8<N; i8++){ ..処理.. data[i1][i2][i3][i4][i5][i6][i7][i8] = なんたらかんたら ..処理.. } なんか、再帰関数使えば数行で終わる気が…
40 :
仕様書無しさん :2001/08/08(水) 07:09
VCで開発なのにVCが入ったPCが1台だけしかない。 コードは4人で書いているのですが効率悪い。 上からは「机上で考えてからパンチ作業に移れ」といわれる。 上司は元COBOLER。
41 :
仕様書無しさん :2001/08/08(水) 07:19
>>40 ライセンス契約をしっかり守る良い会社じゃないか。
42 :
仕様書無しさん :2001/08/08(水) 07:37
フォーム250個。
43 :
仕様書無しさん :2001/08/08(水) 08:11
>>34 Σ(゚д゚lll)ガーン
俺もやってる。
44 :
sage :2001/08/08(水) 08:45
>>40 最近、流行のXPじゃない。
ペア・プログラミングを超えて
フォー・プログラミング(4人組って?)
45 :
:2001/08/08(水) 09:19
VBプログラマーですが 変数名&関数名を漢字で書いたら怒られました。 どうしていけないの? ネイティブに失笑されそうなわけのわからん英単語を ならべるよりよっぽど読みやすいと思うのですが。
46 :
仕様書無しさん :2001/08/08(水) 09:20
>>45 うんうん、そうかも知れないね、
でも僕は君とは絶対に仕事したくないな。
47 :
仕様書無しさん :2001/08/08(水) 09:43
VBは 変数名&関数名に漢字を使っても問題ありません。 が 46みたいな方が多いので こっそりと使いましょう
カルテット
全部の変数名を1文字で済ませてる関数は、追っかける意欲どころか 生きる気力さえ奪う。
括弧のインデントが嘘のソース 整形しろってか
51 :
... :2001/08/08(水) 16:27
変数名が1文字とか、インデントが正しくないものや 1関数が以上に長いものはコンパイルエラーするべきだと思います!!!
52 :
仕様書無しさん :2001/08/08(水) 17:50
あるソース #define memmove2(A,B,C) memmove(B,A,C) あるソース #define memmove2(A,B,C) memmove(B,A,((C)+(C))) あるソース #define mmv(B,A,C) memmove(B,A,C) あるソース #define memmove2(B,A,C) memmove(B,A,C)
53 :
仕様書無しさん :2001/08/08(水) 17:51
今日見つけた同一プロジェクト内の 別ソースのヘッダです。 #define LOCAL static #define STT static #define STAT static #define VOID void #define VD void #define EXTERN extern #define EXT extern #define EX extern #define CONST const #define CONSTANT const #define CST const typedef char SBYTE; typedef unsigned char BYTE; typedef unsigned char BT; typedef unsigned char UBYTE; typedef unsigned char UCHAR; typedef unsigned short SHORT; typedef unsigned short USHORT; typedef unsigned short SHT; typedef unsigned int WORD; typedef unsigned int UWORD; typedef unsigned int INTEGER; typedef unsigned int INT; typedef unsigned long LONG; typedef unsigned long ULONG; typedef unsigned long DWORD; typedef unsigned long LWORD; typedef unsigned char *P_BYTE; typedef unsigned int *P_WORD; typedef unsigned long *P_DWORD; typedef unsigned char *PBYTE; typedef unsigned int *PWORD; typedef unsigned long *PDWORD; typedef char *P_CHAR; typedef int *P_INT; typedef short int *P_SHORT; typedef long *P_LONG; typedef char *PCHAR; typedef int *PINT; typedef short int *PSHORT; typedef long *PLONG; typedef unsigned int *POI; typedef unsigned int *POINTER; typedef unsigned int *PT; typedef unsigned int *P_POINTER; 何考えてるか判らなくて、「これ整理してください」と 依頼したら「なにか問題がありますか」だと!!
>>53 何がしたいんだろうね・・・それ書いた人・・・・(;´Д`)
55 :
偽ASIMO :2001/08/08(水) 18:07
56 :
仕様書無しさん :2001/08/08(水) 18:07
>>53 -54
てか、一人で書いたの?何人もの手を経てきた結果かとおもた。
57 :
仕様書無しさん :2001/08/08(水) 18:15
>>53 ちょっとした打ち間違いによるコンパイルエラーを防ぐ
実に良い方法だ。私も見習おう。
typedef char cahr;
#define hoeg hoge
60 :
仕様書無しさん :2001/08/08(水) 18:59
if (〜) { 処理1; } else { 処理2; goto Label; } 処理3; 処理4; if (〜) { Label: 処理5; } ...
61 :
仕様書無しさん :2001/08/08(水) 19:01
if (...) の条件文がやたらと長げー。 if (...) の閉じ括弧は300カラム目というレベル。 閉じ括弧の塊は笑ったが目は笑っていない。 )))))))))
62 :
仕様書無しさん :2001/08/08(水) 19:03
>>53 ビット演算をやらなくていけない場合とかは
BYTE,WORD,DWORD表記のほうが解りやすいような。
BYTE Low,High;
WORD wd = (WORD(High) << 8) | Low;
WinMain が 4000 行以上あった。 自社のプロジェクトじゃなくて孫請けだけど。
64 :
53 :2001/08/08(水) 19:26
>>62 それが、ここに書かれている宣言のほとんどが使われてないのだ。
char -> U1
short -> U2
long -> U4
と宣言されて、それがメイン(見てるひと、そう、その職場だよ!)
65 :
仕様書無しさん :2001/08/08(水) 19:29
>>63 winmainが4000行ってのはすごいかもね。
winprocが4000行なんてのはざらにあるけど。
67 :
偽ASIMO :2001/08/08(水) 21:10
68 :
仕様書無しさん :2001/08/08(水) 23:13
全体で数百KステップにおよぶSQL エラー処理一切なし(目を疑った) だから障害起きた時にすぐ対処できんのだろうが!
69 :
仕様書無しさん :2001/08/09(木) 00:29
俺が今までに唯一切れたソース。 char data1[1024]; char data2[1024]; char data3[1024]; ・ ・ ・ char data81[1024]; memset(data1,'\0',1024); memset(data2,'\0',1024); memset(data3,'\0',1024); ・ ・ ・ memset(data81,'\0',1024); fgets(data,fp); strcpy(data1,data); fgets(data,fp); strcpy(data2,data); fgets(data,fp); strcpy(data3,data); ・ ・ ・ 構造体か2次配列使え!!!!!アホ新人!!! オマケにmainだけしかfunctionが無ぇ…
70 :
物申す :2001/08/09(木) 00:37
つうか、変数名を変な略字にするのはやめろ!! ちゃんとフルスペルにしろ!長くなってもかまわん! Count を cnt にするな Data を dat にするな Copy を cpy にするな getDrvSta なんて略すな! GetDriveStatus にしろ!!
71 :
仕様書無しさん :2001/08/09(木) 01:08
>>70 いつもcount→cntにしてます。スマソ
でも、プロジェクト全体で統一してるからいいじゃん(藁
kaunto
73 :
名無しさん@1周年 :2001/08/09(木) 01:54
>70 その辺はコーディング規約によるからなんとも。
74 :
仕様書無しさん :2001/08/09(木) 02:22
>>70 あなたはアマチュアプログラマですね。
いいですね。好き勝手できて、幸せで。
75 :
仕様書無しさん :2001/08/09(木) 02:27
#define YEAH true #define WOO false ふざけんなって,マジで(笑)
77 :
仕様書無しさん :2001/08/09(木) 02:53
>>70 最近のプログラマと思われ
略すのなんて普通、ましてや全部一般常識レベルの話じゃねえか
78 :
仕様書無しさん :2001/08/09(木) 02:57
>70 統合開発環境のコード補完機能使いこなせない UNIX上がりのドキュソがやりがちだね
79 :
仕様書無しさん :2001/08/09(木) 03:03
#include <stdio.h> /* 正常位 */ 標準入出力・・・
ふん、若い奴はすぐ機械に頼りやがる。コードってのはなあ、 こーかくんだよ、トンテンカントンテンカン...
81 :
仕様書無しさん :2001/08/09(木) 04:04
If Request("modo")=" 登 録 " Then
>>70 は最近のプログラマーなんだろう。
昔は関数名は短くしたのだよ。変数や関数などのシンボルに文字数制限
があったのだ。
さらにコンパイル後、コードに含まれるこれらシンボルがただでさえア
ップアップのリソースを消費するのはけしからん!っていう理由からだ
Windowsプログラムでは
>>70 のような書き方がはやりだな。
そうは言ってもcreateがcreatになるのはなぁ
86 :
仕様書無しさん :2001/08/09(木) 10:30
>>83 >リソースを消費するのはけしからん
シンボルは削れるし、メモリ上にシンボルテーブルを持つのは最近のこと
具体的なOS名は?
>>84 それは単なる誤字。最近 information が全部 infomation になっていて
激しく萎えた。当然気持ち悪いので全部置換。ちなみに当方はまだ学生。
#creat って Unix のシステムコールだっけ?
SearchがSerchになってて凹み。 次に上司も英語が苦手だとわかって凸み。(なんて読めばいいんだ
receiveがrecieveになってるってのもあったな
91 :
仕様書無しさん :2001/08/09(木) 10:58
>>87 >ちなみに当方はまだ学生。
その発言に何の意味があるのか不明
学生の方が英単語スペルはわかってて当然のような
>>91 なんとなく言いたかっただけだろ。
ちなみに当方はまだ学生。
93 :
仕様書無しさん :2001/08/09(木) 11:03
入社早々渡されたソースのコメントに、 /* degital */ と書いてあるのを見つけたときは鬱になったな。 でも、そんな俺も今では後輩に渡すソースに /* writed */ と記述してたりする。(w
94 :
仕様書無しさん :2001/08/09(木) 11:04
よく見るスペルミス(私見) search -> sarch, serch write -> rite through -> trough message -> mesage information -> infomation configuration -> configration monitor -> moniter data -> datas profile -> profeel 番外編 overwrite -> uwawrite
96 :
仕様書無しさん :2001/08/09(木) 11:42
#define ONE 1 #define TWO 2 #define THREE 3 まじで萎えた。 実行文に数値定数を直接書くなというのはそういう意味じゃないんだよ。
>>96 エディタで検索しやすくていいじゃん。(藁
98 :
仕様書無しさん :2001/08/09(木) 11:51
>>70 フルスペル主義賛成!
そりゃ昔は8文字までとか制限あったのくらい俺だって経験
長いから知り過ぎるくらい知ってるけど。
何で未だに昔の足かせを引きずらなくちゃならないんだろう。
ただプロジェクトリーダーとかの頭が固まってしまってるだけじゃねーの?
たまには紫外線を当てて古いコードを消してみることも大事じゃないか?
それとも、タイプ数????
>>96 後の変更で
#define ONE 0
とかなったら、サパーリ意味不明になるな…。(ワラ
>実行文に数値定数を直接書くなというのはそういう意味じゃないんだよ。 頭の不自由な後輩には手取り足取り教えてあげてください。
102 :
仕様書無しさん :2001/08/09(木) 12:15
>>96 #define BIT0 0x00
#define BIT1 0x01
...
#define INT1 0x01
#define INT2 0x02
...
#define INT99 0x63
こういうのを見たことがあります
103 :
仕様書無しさん :2001/08/09(木) 12:16
>>98 そこまでこだわるなら、人をあだ名や名字だけで呼ぶのは禁止な(w
104 :
仕様書無しさん :2001/08/09(木) 12:21
105 :
仕様書無しさん :2001/08/09(木) 12:25
Canselはないですか?
106 :
仕様書無しさん :2001/08/09(木) 12:35
>>104 ふーん、制御系って頭悪いの多いんだね(藁
109 :
仕様書無しさん :2001/08/09(木) 12:47
>>105 CanselってCancelのこと?
違ってたらスマソ。
110 :
仕様書無しさん :2001/08/09(木) 12:52
綴りが間違ってる変数やファンクションが盛り込まれてると、殺意を抱くね。データベースのカラム名でもしかり。 anquete; とか corection; とか、明らかに思考とコーディングの妨げ。 コードにもスペルチェッカ掛ける必要アリだな。
111 :
仕様書無しさん :2001/08/09(木) 13:01
入社試験で人チェックをちゃんとやって欲しいです。
112 :
仕様書無しさん :2001/08/09(木) 13:04
おれ制御系だけど、
>>102 みたいなことしないよ。
113 :
仕様書無しさん :2001/08/09(木) 13:15
Cのローカル変数名みたいにスコープが狭い名前は、 エディタで置換すれば済むけどねえ。 DBのテーブル名や列名は悪質だよね。 ヘタすると、それにアクセスするアプリ内のSQL文から ストアド内のSQLまで全部変えないといけないな。
>>85 リッチーじゃなくてケン・トンプソンでなかったっけ?
そいえばなんかのインタビューで、
“unixを作り直すとしたらまずどこから手をつけるか?”
という問いに対して
“creatの綴りを直す”
と答えていた(w
115 :
仕様書無しさん :2001/08/09(木) 13:37
cnt って変数見ると、"cunt"? って思ってしまう。 ++cnt; // クリクリしちゃうぞ、オラ〜
>>106 違うよ。人を見抜く力に著しく劣ってるねキミ
おっと
>>107 だった。・・・107と同レベルなのか? 俺
118 :
仕様書無しさん :2001/08/09(木) 13:42
>>110 以前データベース作成者が英単語に死ねっつー程弱く、
それが原因でコード上の色々なスペルもアホ丸出しになったことがある。
「データベースはそれはそれで仕方が無いとして、せめてソースの方だけでも
正しいスペルにしましょうよ」と会議で言ったら
「そんなことやったら整合性が取れなくなる可能性があるからダメだ」と言われた。
「整合性って変数名やラベルの問題だから関係ありませんよ」と反論したら
「じゃあ何か起きた時は君が全ての責任を取るというんだな」だって。
calamとかposisionとか…ソースコードも納品対象だったんだ、恥ずかしかったよ。
119 :
仕様書無しさん :2001/08/09(木) 13:43
入社当初は、"warning"をワーニングと言われたのも?だったな。 今となっては自分も言ってるけど(w
英語のスペルも困るが、ウチの上司は日本語の単語変換もムチャクチャだ。 文法や言い回しもおかしいので、中学も出てないのではって思う。 ・先週に○○について見当を行ったことは既にお伝していますが これに対する○○○○からの解答を現在応急しています。 ・今回のプロジェクトより進捗を行うようにしました。 皆さん各自で管理するよう進捗をお願いします。 ・最近残業がおおい割に開発がよくありません。無駄な残業は 行わないよう休憩を少なめにして効率よく結果を示してください なお20時までは特に制限がないので頑張って残業してください 必用であれば休日出勤を開くこともできますが必ず3日前までに リーダーまで報告をして頂ければ大変便利です。 先週のメールの一部をそのまま抜粋(w
>>120 失礼ですけど、アナタの上司は来日して何年目ですか?(藁
>#define BIT0 0x00 >#define BIT1 0x01 ゲーム屋だけど、レジスタいじる時にはよく使うよ。
if (inp(xx) & 0x40)) より if (inp(xx) & BIT6)) と書く方が間違えにくいからね。
BITはいいよ。INTはいらんだろ
>BITはいいよ。INTはいらんだろ それは同意。最初みたときはインタラプトの INT かと 思ったけど(int 21h みたいな)、 デシマルの意味として使ってるならドキュン。
127 :
仕様書無しさん :2001/08/09(木) 15:07
>>125 本当に
>#define INT1 0x01
>#define INT2 0x02
>...
だった?
#define INT0 0x00
#define INT1 0x04
#define INT2 0x08
...
とかじゃなかった?
128 :
7743 :2001/08/09(木) 15:11
>>120 ケケちゃんなみですね。
>>121 生まれたときから日本に存在されます。
悪戯はよせ!!
129 :
仕様書無しさん :2001/08/09(木) 15:37
BITn じゃなくて、機能名つけない? #define xxx_READY 0x04 みたいに。
レジスタの数*bit数分名前付けするのはちと大変だて。
しかし、cntなんて普通なものにも文句が付くとは時代の流れを 感じるなあ。そういう奴に昔の処理系とか渡したら気が狂って しまうかもしれない。
そのうちニーモニックも略すな、フルワードで書けとか言い出したりして。
>>129 上位のルーチンではそうするが、そこから呼ばれる下位の直接IOをいじる
ルーチンではやっぱりBITnは必要になる。
ごめん、こうだった。 #define HEX1 0x01 #define HEX2 0x02 #define HEX3 0x03 #define HEX4 0x04 ...... #define INT1 1 #define INT2 2 #define INT3 3 #define INT4 4
>>134 全然違うじゃねーかよ。
それで、
#define INT1 1
#define INT2 2
を使ってる部分のソースは無い?
省略さないでいいところを省略し、 省略すると訳わからんようになるところを省略しているって ソースコードならよく見かけるな long vdt_count; …vdt?なんかの拡張子かな。何か特殊なフォーマットのファイル関連のカウンターか? そう思って質問してみた。 意味: long Value_of_Download_DataCount ワカルカイ!!(゚д゚)=3
>>136 ふつ〜は、VideoDisplayTerminalの略。
138 :
102 :2001/08/09(木) 18:07
>>138 しまった、まんまと騙された。
鬱だ、酒飲んで暴れよう。
char buf[1024]; ↓ Segmentation Fault したらしい ↓ char buf[10240]; ↓ それでも Segmentation Fault ↓ char buf[102400]; ↓ (以下略) (TдT;)マズー
144 :
◆nAOJmtak :2001/08/10(金) 04:08
まだ若いと思ってたが、cntがだめとは・・・ msgとかconとかrsとかもダメナノカー 何処まで略さなければ若く見えるのか判定キボーン
145 :
仕様書無しさん :2001/08/10(金) 05:27
別にローカル変数に短い名前を付けるのは全然かまわんと思うぞ。 つうか、普通そうするだろ。「シンプルさ」はわかりやすさにつながるんだ、って だれか言ってたよ。グローバル変数は当然フルスペルにするがな。 関数ならせいぜい数十行だから、変数の定義みて忘れることはほぼないだろ。 それより、変数の宣言にコメントつける方が大事。 for (boxNumber = 0; boxNumber < maxNumberOfBox; boxNumber++) { ... } より、 for (i = 0; i < max; i++) { ... } の方がはるかにわかりやすい。
146 :
仕様書無しさん :2001/08/10(金) 07:29
>>136 ぎゃははは。
短くてシンプルというわけでもなく、わかりやすいという
こともなく、さりとて中庸というわけでもなく。
ラベル文字数制限8文字とか16文字のアセンブラだったら
こういう省略もアリだったかも。
147 :
113 :2001/08/10(金) 09:01
>>145 私もそうしてます。
ローカル変数みたいにスコープの狭いものはシンプルに、
グローバル関数や、メンバ関数みたいに広いものは説明的にね。
148 :
仕様書無しさん :2001/08/10(金) 10:08
>>142 では定番でこれ
char *p;
strcpy( p, "string" );
149 :
仕様書無しさん :2001/08/10(金) 10:32
n = printf(...); if (n < 0) { exit(1); } n = printf(...); if (n < 0) { exit(1); } n = printf(...); if (n < 0) { exit(1); } (以下略) printf() の戻り値をチェックときってどういう場合必要ですか? うちでは毎回やってるんですけど。
150 :
仕様書無しさん :2001/08/10(金) 10:33
>>149 なんで、if (n == EOF) と書かずに、そんな持って回った書き方をする?
>>145 > 「シンプルさ」はわかりやすさにつながるんだ、って
> だれか言ってたよ。
Kernighan & Pike「プログラミング作法」かな。
>>149 fprintf() 系が失敗する場面だと、ファイルストリームが readonly だったり
マルチスレッド時にロックに失敗したとか考えられるけど、printf() だとメモ
リ不足でフォーマットに失敗した、int の最大値を越える数の文字を一気に出力
しようとした、ぐらいしか思いつかんな。
ところで無条件に exit() するだけなら、なんで
xprintf()
printf() を実行して戻り値が EOF なら exit()
というような関数を作らないの?
154 :
仕様書無しさん :2001/08/10(金) 11:24
>>113 ローカル変数といえども長いものにすべき。
短くしてもいいのは、長くても30行以内の関数まで。
それを超えるときは長い変数名にしなければいけない。
自分さえ良ければそれでいいと思う考え方はやめましょう。
他の人がこまるのだから。
155 :
仕様書無しさん :2001/08/10(金) 11:25
>>153 例えばなんだよ。揚げ足とんな、ぼきぇー
156 :
仕様書無しさん :2001/08/10(金) 11:39
>>151 「出力した文字数を返し、エラーがあった場合負の値を返す」
というのが printf の仕様。
EOF が返ってくるとは限らん。
158 :
仕様書無しさん :2001/08/10(金) 11:50
夏だねえ。
>>151 エラーを EOF って決めつけていいの?
>>149 っていうかさぁ、エラーチェックしかしないわけ?
おれは文字数カウントするのにいつも使ってるよ(嘘)。
>>151 MSDNのヘルプを見たら、printfは、
「失敗したら負の値を返します」と書いてあるが、
EOFを返すとは書いてないようだ。
かぶった。
>>154 関数が長いと
for (int i = 0; i < 3; ++i){
2,3行の処理
}
っていうiまで長い変数にしないといけないのか?
やだな。
変数の内容についてじゃなくて、関数の長さで決めてるのがなんだかね。
お昼休みだねぇ。
164 :
仕様書無しさん :2001/08/10(金) 12:03
>>162 お前プログラマーじゃないだろ?
情けなくなること書き込むなよ。
165 :
154 :2001/08/10(金) 12:09
>>162 一応馬鹿にもわかるように言っておくけど、
関数が長いと変数も多くなる分、int cnt1,cnt2,cnt3みたいな
使い方される変数が増えて把握するのが難しくなるからって
ことだよ。そんなばかな変数より、cnt_first_tryみたいに
なにに使われているかわかるようにしておけば他人にとっては
把握が楽になるだろ。長い関数になればなるほど。30行は
1画面におさまる範囲の長さってことの基準だよ。
166 :
仕様書無しさん :2001/08/10(金) 12:10
>>155 ?? 俺は153ではないが、揚げ足なんて取ってないと思うが?
167 :
仕様書無しさん :2001/08/10(金) 12:15
昔、 「関数の長さは一画面に納まるように30行以内にすること。」 って規約がある会社があったぞ。(藁
168 :
仕様書無しさん :2001/08/10(金) 12:18
そうだ。こう書くべきだ。 for(int nLoopCounterForHogeHoge = 0; nLoopCounterForHogeHoge < MAX_OF_HOGEHOGE; nLoopCounterForHogeHoge++){ 2,3行の処理 }
169 :
仕様書無しさん :2001/08/10(金) 12:29
ハンガリアン記法ってなんですか。 [a-z]([A-Z][a-z]*)* にマッチする変数名ですか。
170 :
仕様書無しさん :2001/08/10(金) 12:30
だから、変数の使われ方しだいだろ。
単なるループカウンタなんかの命名はどうすんのさ。
>>162 はそういいたいんじゃないのか?
>>157 ,159,160
そうなのか、BCB++のヘルプでは、
>戻り値
>成功すると,printf は出力バイト数を返します。
>エラーの場合は,printf は EOF を返します。
となっていたよ、鬱だ。
172 :
仕様書無しさん :2001/08/10(金) 12:44
>>165 一応馬鹿にもわかるように言っておくけど、
> 関数が長いと変数も多くなる分、int cnt1,cnt2,cnt3みたいな
>使い方される変数が増えて把握するのが難しくなる
そんな状態になったら関数を分割しろや。マヌケ。
173 :
165 :2001/08/10(金) 13:04
>>172 バカ君。こっちがいっている意味を理解できないならレスつけるな。
どうせ似非プログラマーなんだろうから話にならんは。
>>170 そんなものあたりまえだろ。そんなことを言ってるんじゃないって
ことぐらい常識で判断できるだろう。できてないからバカだといったんだよ。
174 :
仕様書無しさん :2001/08/10(金) 13:10
cnt_first_tryって何の略?
175 :
165 :2001/08/10(金) 13:11
>>174 そんなとりあえず作ったものでどうこう言わないように。
>>173 バカバカうるさいよ。バカ厨房。氏ね、マヌケ。
177 :
165 :2001/08/10(金) 13:20
>>176 そういう態度が馬鹿だっていってるんだよ。
>>177 そういう態度がバカ厨房だっていってるんだよ。
179 :
165 :2001/08/10(金) 13:25
>>178 はいはい、そーですか。理屈で勝てなくなるとすぐこれだ。
もーどーでもいーや。馬鹿の相手しててもしょうがないからね。
贋プログラマーの相手しててもしょうがないしね。
180 :
コメント無しさん 162 :2001/08/10(金) 13:27
漏れ、似非プログラマーだから長い関数あんまり書かないしね。 3000行くらいのソースの中に、50行以上の関数って4つくらいしかないや。 全部で150くらい関数あるんだけど。 ローカル変数も長いものにするべきって、他人をばかばか言いながら主張するほど 頻繁には長い関数ないなぁ。 173=165=154はプロの方ですか? やっぱりプロの方だと関数まとめて、長い関数たくさん作れるんですね。
181 :
172 :2001/08/10(金) 13:27
>>173 把握できないくらい長い関数を書いた時点で
お前の負けって事だよ。屑プログラマーさん。
182 :
仕様書無しさん :2001/08/10(金) 13:29
┌──────────┐ | 目指せ USO800 認証 | └──────────┘ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ・∀・) < 30行は1画面におさまる範囲の長さってこと ( 部長) | の基準だよ。 | | | | バカにもわかるように言うが。 (__)_) | \___________________ ―――――――――――――――――――――――───── 30行1画面っていつの時代だよ・・・・。 __ __________ ∨ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧∧ (# ) < バカバカうるせえぞ。 (, ;) ( 平SE ) | 罵倒すれば納得すると思ってるのか。 /PG| | │ |. | 〜(__,ノ (__)_) \_______________
>>178 君のどこに理屈が合ったんだ?
まぁ、降参ってことだろうから、
これ以上いじめないけど。
>>180 長い関数なんて作らない
短いのもあまり作らない
185 :
仕様書無しさん :2001/08/10(金) 13:33
165みたいなのってプロジェクト内に絶対一人はいるよな〜
186 :
仕様書無しさん :2001/08/10(金) 13:39
>>184 つまるところ、少なくとも C でプログラムを書いたことがない
まっ、まさか、常に main のみですかぁ〜
YesYesYesYes....
全てマクロで書いているというなら、それはそれですごいな
187 :
仕様書無しさん :2001/08/10(金) 13:41
>>185 まあ、何かが間違ってしまったままいい大人になってしまったやつ
ってのはいるからねえ。
最初、煽り専門厨房かと思ったけど、30行うんぬんで
社内リストラされてるジジイのような気がしてきたよ
>>186 だーほ
行数じゃなく処理単位で関数分割しているからだ
80×24字端末を基準に話しているヤツらが多すぎ
189 :
仕様書無しさん :2001/08/10(金) 14:00
for (int i = 0; i < max; i++) {
処理1;
処理2;
}
こういう単なるループカウンタなら普通に i って使うけど?cnt_try_first
ってこんなループカウンタ使ったことねえよ。
>>168 みたいなのはまじで
勘弁してくれ。for (int i = 0; i < max; i++) こういうのはイディオム
として覚えない?
for(int nLoopCounterForHogeRow = 0; nLoopCounterForHpgeRow < MAX_OF_HOGEROW; nLoopCounterForHogeRow++){ for(int nLoopCounterForHogeColums = 0; nLoopCounterForHogeColums < MAX_OF_HOGECOLUMS; nLoopCounterForHogeColums++){ // 処理 } } 二次元の場合はこのように書きなさい。 それから、関数の長さが30行を越えても、把握できるぞ。(藁
191 :
186 :2001/08/10(金) 14:12
>>188 まあ、それはいいとして、
「長い関数も短い関数も書かない」
に何の関連が?
まあ、軽いギャグにマジレスされてもなー。
「長い関数も短い関数も書かない」 = 「関数というものを書かない」
と曲解してやったんだよ
192 :
仕様書無し :2001/08/10(金) 14:21
長い変数名がかえってプログラムを見にくくする事もある。 変数の使われ方の真意なんて、どうせ名前だけでは判断できない。 プログラムをある程度ながめて、やっと分かるものだ。 どうせ名前だけで判断できないのだから、短い方が覚えやすい。 という場合もある。
>曲解してやったんだよ 捨て台詞が、えらそうでヨシ
194 :
仕様書無しさん :2001/08/10(金) 14:48
>>189 おまえらやっぱり馬鹿だね。そんなのはあたりまえだっていったのに。
どうすればそんなにゆがんで捕らえられるんだろう。
頭が悪いかプログラマーじゃあない奴としか思えんが。
195 :
関西人 :2001/08/10(金) 14:58
cnt_try_firstって何語やねん
196 :
仕様書無しさん :2001/08/10(金) 14:59
それがたとえループ変数でも、変数名を1文字ですませている 個所が頻繁に出てくるプログラムのデバッグやメンテはしたくない。
>>196 やたら長い変数名つけてるプログラムのデバッグやメンテもしたくない。
関数自体は長くても、五行くらいしか使うところ無いのに「cnt_try_first」
とかやってたりね。
198 :
仕様書無しさん :2001/08/10(金) 15:20
まぁ、まず「プログラミング作法」第1章スタイル を読んでから議論しようじゃないか。おれはする気無いけど(笑)
>>198 議論するの?
中途半端な知識と経験をもとに煽ったり煽られたりして遊んでるんだけど、だめ?
ちゃんと調べないと書きこめないなら、194みたいな人が困るじゃないか。
誰が見ても何をする変数(関数)なのかを判断出来る程度の 長さに省略して命名するのが最善という事で決定。 各社、コーディング規約の更新をお願いします。
>>200 テンポラリな変数は一文字とかにしとけば、どうでもいい変数ということが
わかりやすいしね。
202 :
社会人5年 :2001/08/10(金) 15:29
int int_Cnt ;
int int_Max ;
for( int_Cnt=0 ; int_Cnt < int_Max ; int_Cnt++ )
{
処理1();
処理2();
}
ならたいしてウザくもなく見にくくもなくっと思うんだが。
指標値でなくて回数判定用途のみにカウンタ使うんなら
while(1)
{
if( int_Cnt < int_Max )
{
break ;
{
int_Cnt++ ;
}
でもいいと思われ。
ついでに
>>196 マンセー
>>197 変数の内容遷移を追いやすいぞ
203 :
仕様書無しさん :2001/08/10(金) 15:30
リストラされたオヤジPGがバカ連呼オナーニしています
204 :
社会人5年 :2001/08/10(金) 15:31
うぉ。インデントが消えた。ウツダ。
>>201 1文字変数が多いと、ちょっと長めの関数書いた時に
見直しするとつらくならない?
例えばiWkとかiTmpくらいの名前にしとけば多少は
見やすくなると思うんだけど、どう?
206 :
社会人5年 :2001/08/10(金) 15:34
>>200 作り手が楽できるだけやろ。
っちゅうか厨房は拡大解釈してなんでもそんなんにしてまう危険が大なのでやめて(悲願
207 :
社会人5年 :2001/08/10(金) 15:35
208 :
社会人5年 :2001/08/10(金) 15:37
↑おれって決定的に目が変?
>>207 (数値間違い再び)
209 :
仕様書無しさん :2001/08/10(金) 15:38
頭冷やしてきたほうがいいよ。
>>207 なんか滅茶苦茶ですな。
お仕事あんまり頑張りすぎない程度にやってくださいね。
>>205 どうせそういう変数って前後3行くらいしか使わないからどうでもいいことに
してる。
>>206 厨房の拡大解釈は困るけどね。そういうやつらはもっとひどいことしてるから
変数名くらいどうでもいい。見ただけでへたれなことしてるのがわかるという
副作用もあって(゚д゚)ウマー
少なくとも、昼間っから 2ch で延々罵倒しあう連中に ロクな PG はいない、ってことで宜しいか?
213 :
仕様書無しさん :2001/08/10(金) 15:46
2ちゃんの投稿番号でパニックするんじゃ、変数名の省略なんかもってのほかなんだろ。
>>212 多いに同意。
漏れはSEだから関係無いし。
215 :
仕様書無しさん :2001/08/10(金) 16:06
つーか、変数名が短くていいって言ってる奴はただ単に自分が 楽をしたいからだけでは?それを逆にみにくくなるって少数例を だして隠そうとしているだけにしかみえないんだけど。
216 :
仕様書無しさん :2001/08/10(金) 16:08
↑ なんつーか、世間知らず
217 :
コメント無しさん :2001/08/10(金) 16:11
落ち着いたようだからマジレス 変数名の命名規則などのコーディング規約は、実行・徹底することにそれなりのコスト がかかるので、実害の無いものはなるべくゆるいものを使っています。 グローバル変数や外から使うクラス変数にはそれなりの規約を設けますが、他に影響の 少ないローカル変数に関しては、実際のコーディングのコストもですが、チェックを徹底 したり書きなおしたりするコストが馬鹿らしいので、どうでもいいことにしてます。 徹底できない規約ほど馬鹿らしいものはないし。
218 :
仕様書無しさん :2001/08/10(金) 16:16
>>217 ゆるい規約マンセー!
C++のコーディング規約に「コメントは必ず/**/で囲む事」なんてのが
書いてあって、ちょっと抗議したけど聞き入れられなかった時は
もの凄く鬱になった。
219 :
仕様書無しさん :2001/08/10(金) 16:20
>>217 ウチもそんな感じ。
入社当初は、"if"と後ろの"("の間にスペースを置く。なんて規約まで
あったけど、最近はローカルな事に関してはゆるくなった。
220 :
仕様書無しさん :2001/08/10(金) 17:09
C言語なのにCOBOLみたく 「何文字目から何を書いて、何文字目からコメントを書く」と 指定されたところがあったな。しかもTAB禁止。
221 :
仕様書無しさん :2001/08/10(金) 17:11
>>220 サラリーマンなら会社の規約に従えってゆーの。
何様だ?
222 :
仕様書無しさん :2001/08/10(金) 17:18
おれが使ってたソース解析のタコツールは '//' のコメントが通らなかった。 きっと他に理由があるのでは?
223 :
仕様書無しさん :2001/08/10(金) 17:56
>>221 契約社員の時だった。
それに従わなかったとは誰も言ってないだろ?ヴァーカ
224 :
仕様書無しさん :2001/08/10(金) 18:12
「何文字目から何を書いて、何文字目からコメントを書く」 いうのは カラムに依存する古い言語のなごりですね その会社まともじゃないですね
225 :
仕様書無しさん :2001/08/10(金) 18:32
>>205 一文字変数はさすがにカウンタ以外には使わんなー。
だが、cnt_try_first は長すぎ
>>188 処理単位で分割しているとして、普通に把握できる範囲まで
分割できないのは無能。
まあ、一度に把握できる範囲が人より狭かったりー、関数レベルの仕様書を元に
コーディングするだけの奴隷プログラマだったらまあ多めに見てやるよ。
226 :
仕様書無しさん :2001/08/10(金) 18:33
だから、べつにnumberOfHogeHogeでなくてcntでもいいんだって。 変数の宣言にコメント書けば。 /* HogeHogeの数 */ int cnt; って、書いてあればわかるだろ?
227 :
仕様書無しさん :2001/08/10(金) 18:36
>>223 給料もらってんなら愚痴るな!
何様だ?
228 :
仕様書無しさん :2001/08/10(金) 18:38
>>225 だれもcnt_try_firstをそんなもんに使えとは書いていない。
バカが勝手にそう解釈しただけ。馬鹿の言うことを間に受けるな。
229 :
仕様書無しさん :2001/08/10(金) 18:38
それと、オブジェクト指向言語だったら、クラス名がフルスペルに なってるから、変数名はほぼどうでもいい。 ErrorMessage msg; をわざわざ、 ErrorMessage errorMessage; にする意味なぞない。
230 :
仕様書無しさん :2001/08/10(金) 18:43
ループカウンタなら i や cnt で何が困るのか分からない。後で何やっている か分からなくなるとでも? まあ、それ以外の変数は例えローカルでもあまり 略さず宣言しているけど。
231 :
仕様書無しさん :2001/08/10(金) 18:44
232 :
仕様書無しさん :2001/08/10(金) 18:51
>>230 だれもループカウンタの話なんてしてない。
馬鹿が話をごまかすためにループカウンタを持ち出しただけ。
1文字の変数を使うのは馬鹿がすることだといったら
ループカウンタはどうなんだって言い出して、話をごまかそうと
しただけ。
ところでさ、暇だろ。おまえら。 俺は仕事終わって喫茶店でまたーりしてるところ
234 :
名無しおやぢ :2001/08/10(金) 19:18
SQLの文字列がグローバル変数(現在メンテ中・・・) こんなモノスゴイのはまさかガイシュツぢゃないよね?
235 :
仕様書無しさん :2001/08/10(金) 19:55
cnt_try_firstって何って意味なの? 長いのに意味不明なんですが。型もわからないし。 nFirstTryCountでいいじゃん。
236 :
仕様書無しさん :2001/08/10(金) 19:56
237 :
仕様書無しさん :2001/08/10(金) 20:40
238 :
仕様書無しさん :2001/08/10(金) 21:10
>>234 SQLの変数はグローバルでないといけない
システムはありますが
それの解釈をまちがえてしまったのかもね
>>229 メンテする事考えて分かりやすい変数名にしたんでないん?
>>235 リストラされた気の毒な元PGを
いじめてやるなよ。
短くするにもセンスってのがある countをcntにしたくせに、別のあるところでは controlをcntにすんなゴルァ>前任者 今かかわってるのはC言語で1行70文字。 おかげでひたすらネストを浅く書くために腐心する 癖がついたよ。藤原流になっちゃった
242 :
仕様書無しさん :2001/08/10(金) 21:42
>>235 このバカが、大文字小文字をで変数名をつけるな。
K&Rを読んでみろ、そんな表記はどこにもないぞ。頭悪いな。おまえ。
243 :
仕様書無しさん :2001/08/10(金) 21:46
>>242 こういうのを「K&R厨」と呼ぶことを提案します。
244 :
仕様書無しさん :2001/08/10(金) 21:47
┌──────────┐ | 目指せ USO800 認証 | └──────────┘ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ・∀・) < 頭の悪いバカにもわかるように ( 部長) | 私が命名してあげよう。 | | | | cnt_first_tryなんかどうだ? (__)_) | \___________________ ―――――――――――――――――――――――───── ネイティブどころかインド人にも失笑されますよ。 __ __________ ∨ ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧∧ (# ) < ハンガリアン記法を知らないのカー (, ;) ( 平SE ) | /PG| | │ |. | 〜(__,ノ (__)_) \_______________
245 :
仕様書無しさん :2001/08/10(金) 22:09
>>244 ハンガリアン房発見です。それを使ってるのはMFC使いだけです。
>>243 ローカル変数に大文字を使うのは普通の感覚ではできないよ。
>>242 > このバカが、大文字小文字をで変数名をつけるな。
> K&Rを読んでみろ、そんな表記はどこにもないぞ。頭悪いな。おまえ。
おいおい、正気か?おまえ?
って、夏厨か。マジレスしてしまった。さげ。
247 :
仕様書無しさん :2001/08/10(金) 22:18
>>246 K&Rうんぬん以前にローカル変数に大文字使うのは変では?
普通の感覚ではできないけど。
248 :
仕様書無しさん :2001/08/10(金) 22:19
ぽーりゃんど気泡
MSのサンプルソースがC言語の美しい慣習をぶち壊してしまったんだよ。
250 :
仕様書無しさん :2001/08/10(金) 22:20
ぽーりゃんど気泡
251 :
仕様書無しさん :2001/08/10(金) 22:20
>ローカル変数に大文字を使うのは普通の感覚ではできないよ。 >普通の感覚ではできないけど。 そうか?別に気にならん。
252 :
仕様書無しさん :2001/08/10(金) 22:23
バカが。K&Rも読んだことないんだろ?似非プログラマーが。 お前みたいなのがいるから、迷惑するんだ。バカ。
253 :
仕様書無しさん :2001/08/10(金) 22:23
>>251 そーか?職業プログラマーじゃないでしょ?
他の人はどーなの?
254 :
仕様書無しさん :2001/08/10(金) 22:25
>>252 ローカル変数に大文字使ったら
関数はどうやって書いてるの?
255 :
仕様書無しさん :2001/08/10(金) 22:27
>>253 俺は職業プログラマーだが、気にならんぞ。
ひょっとして、俺(および俺のいる会社)は
標準から大きく外れてるのか?
心配になってきたから、誰か教えてくれ。
256 :
仕様書無しさん :2001/08/10(金) 22:30
>>255 ローカル変数は小文字だけってのは普通だと思うけど。
ハンガリアン記法でもそうだし。
会社の他の人のソースはどーなってるの?
適当なところからソースをダウンロードして調べてみても
たいていの人がローカル変数には小文字しか使ってないと思うけど。
257 :
251 :2001/08/10(金) 22:31
>>253 ごめん、職業プログラマだ。変か?
逆に cnt_first_try とかの方が、冗長で見にくいと思うのだが……。
つか、あんまり気にしてない。
258 :
仕様書無しさん :2001/08/10(金) 22:32
うちもローカル変数は全部小文字。
259 :
仕様書無しさん :2001/08/10(金) 22:34
>>257 cnt_first_tryはどうでもいいけど、大文字を使うと、関数名とかと
かさならない?一般的にはグローバル変数は全部大文字で、
関数名は先頭大文字で、DoDraw見たいな感じ。でローカル変数が
全小文字ってのが普通だと思うが。
260 :
251 :2001/08/10(金) 22:39
>>259 そういう使い分けは一切してない。全部大文字小文字のまぜこぜ。
先頭大文字のパターン。
便利もしくは見やすいのなら、次の仕事でやってみようかな。
ただし、全部大文字ってのは#defineとかぶらない?
261 :
259 :2001/08/10(金) 22:42
>>260 わける最大の理由は他の人がみてわかりやすくなることだよ。
MFCがハンガリアン記法を取り入れたのもそうだし。
自分だけで開発して、自分だけで保守していくんなら何も
いわないけど。
今の話と全然関係ないんだけど、『cnt_first_try』って、すごいな。
そのあとも、全然平気な顔して
>>165 >30行は1画面におさまる範囲の長さってことの基準だよ。
と、「知らないのかそんなことも、この厨房」
みたいな態度なのが特に。
じわじわと笑いがこみ上げてくる。
263 :
259 :2001/08/10(金) 22:51
>>262 変数名の名づけ方としてはおかしくはないと思うけど。
ハンガリアン記法で書きたいのならべつだけど。
264 :
仕様書無しさん :2001/08/10(金) 22:52
職業プログラマのMFC使いですが・・・。 ローカル変数:1文字目が小文字の大文字小文字混在 例:int nLengt; char szName; グローバル変数:g_の接頭詞をつける(ほとんど未使用) 例:int g_nCountOfNode; メンバ変数:m_の接頭詞をつける 例:m_hDC; 関数名:大文字小文字混在 例:GetCountOfNode(void) こんな感じです。
265 :
264 :2001/08/10(金) 22:54
全部大文字は、#defineと列挙かな。あと、typedefした構造体とか。
266 :
仕様書無しさん :2001/08/10(金) 22:55
>>264 別のこと聞いてもいいですか。
MFCって何人かで開発してるの?それとも一人?
何人かではどうやって開発するの。逆に能率下がりそうなんだけど。
267 :
仕様書無しさん :2001/08/10(金) 23:00
>>264 バカが。
K&Rも読んだことないのに職業プログラマーを名乗るなカス。
お前みたいなのがいるから、プロジェクトが迷惑するんだ。
バカ。 氏ね。勝手にルールを決めるな。
266が何が言いたいのか理解できない。
269 :
仕様書無しさん :2001/08/10(金) 23:03
「MFCを使うと、複数人数での開発は能率が悪い。」 という意味じゃない?
>>267 K&Rは読んだけど、俺も264と同じだよ。
ハンガリアン記法だと、接頭辞は型を小文字で書いて、
それ以降は、大文字小文字混ざりでしょ。
いまだにK&Rだけがバイブルということは、
あなたの会社はそこまでの技術で食っていけるってこと?
組み込み屋さんとかはそんな感じなのかしら。
正直 もはや小文字のみの変数は読みづらい体になっとります。 Winが多かったからかな。 ハンガリアン記法は結構昔から批判されてるけどね。 個人的にはハンガリアンが一番わかりやすいんだよなぁ・・・・
272 :
仕様書無しさん :2001/08/10(金) 23:37
表記規則はともかく、名前に型情報を含めるのはわかりやすいよね。
273 :
仕様書無しさん :2001/08/10(金) 23:39
274 :
仕様書無しさん :2001/08/10(金) 23:40
型情報は意味内容と思う。
275 :
10 :2001/08/10(金) 23:51
#define あぼ〜ん delete
ハンガリアンで型を変数名に含めると、クラスの構造がなんかで変わったりして クラスを変えたときに、変数名まで変更しないといけなくなって、本末転倒。 そもそも、新しいクラス作ったら新しいプレフィックス考えないといけなくなって なんだかなぁ。 見やすいことに有為差もあまり感じられないし。 ということでハンガリアンきらいなんですが。
Javaでも m_ を使ってくれ、読みづれーYO。
ハンガリアンとは言わないがキャスト時に型が分かってると嬉しいというのはある。 複数の型が混じってる式とかポインタをキャストする時にはあった方が嬉しいには嬉しい。 ハンガリアンでは接頭辞に型以外の情報(szとかcとか)も入れるがあれはむしろウザい。 そういうのは変数名本体に含まれるようにするからね。 とは言え、実際のところハンガリアンのおかげで特に開発効率が上がったという気はしない。 見た目が統一されることで自己満足はできるけど。
279 :
仕様書無しさん :2001/08/11(土) 00:05
ローカル変数小文字ってのはCの話じゃ? Delphiだと大文字小文字混合が普通でしょ、多分。
そもそも型が分からなくなる程宣言と離れている事が問題 ってのはあくまでCでの話か。C++じゃヘッダーだからしょうがないか。
>>277 Javaはローカル変数は一文字とか適当な名前にして、クラス変数はまじめな
名前をつけることで区別がつくような慣習になってる気がする。
>>279 Delphiは関係ないから気にしなくていいよ。
>>279 そうだね。
VCLのソース見るとかなりまじめな変数名のつけ方だ。
型名を表わすプレフィックスは使ってないけどね。
ifの中だけとかのローカルな変数が定義できないとか使う場所の近く
で定義できない(よね?)のも一因かと。
ループカウンターは大文字のIだったが。
思われる。
クラス変数は thisかSelfみたいの全部つけてくれれば一目瞭然
285 :
仕様書無しさん :2001/08/11(土) 00:21
いいからお前らK&R読め。V&Rじゃないぞ。
>>283 削除し忘れでごみが。。。
5文字リレー小説みたいになってしまった。
ウツだ。風呂逝ってこよう。
ちうかタグジャンプでスコンと飛べるエディタありゃあ 気にならないだろう。班我利あん表記は変数の型を一意に保証 するもんじゃないんだからさ。
>>287 VC++のエディタは、カーソル持っていったらツールチップで型がでると
聞いたが気のせいか?
289 :
仕様書無しさん :2001/08/11(土) 09:05
>>288 Visual Studio はSPが出るたびに当てているけど、変数の型の
ツールチップはときどき出なくなることがある。んなもんで、アテ
にはしていない機能だ。
(何かの拍子にメンバーの補完機能も動かなくことない? 明らかな
コーディングミスに起因するものは別として)
290 :
仕様書無しさん :2001/08/11(土) 09:07
291 :
仕様書無しさん :2001/08/11(土) 09:08
>>289 めったにないけど、1ヶ月に1度ぐらいはある。
292 :
仕様書無しさん :2001/08/11(土) 10:36
#!/bin/bash kill `ps axw | grep pppoe | cut -b2-6` なんじゃこりゃ!
293 :
仕様書無しさん :2001/08/11(土) 13:06
killallは使えないのか?
たまにないことがあるcygwinとか >kilall
295 :
仕様書無しさん :2001/08/11(土) 15:15
>>289 ncbか何かが壊れてるんでないの?
削除してみ
296 :
仕様書無しさん :2001/08/11(土) 15:16
297 :
仕様書無しさん :2001/08/11(土) 15:24
299 :
仕様書無しさん :2001/08/11(土) 15:56
「給料もボーナスも何もいらないから辞めさせてくれ!」 というコメントが書いてあった。何があったんだ?
300 :
仕様書無しさん :2001/08/11(土) 16:48
新人なんですが、 難しそうだなー とか思ってたら変数名が無駄に長いだけだった。
301 :
仕様書無しさん :2001/08/11(土) 17:58
短い変数名&関数名嫌い。でも、長すぎも嫌い。 複雑な処理をする関数の場合は、ローカル変数にもフルスペル&コメント。 簡単な関数は、想像できる範囲の長さの名前。 短い関数のループ用変数は、iとかxとかは使う。
302 :
コメント無しさん :2001/08/11(土) 18:05
>>301 >複雑な処理をする関数の場合は
「30行以上の関数」みたいな、変な基準じゃないからage
テンポラリの変数も一文字じゃだめ?
>>301 -302
もういいかげんにしろや。な。
虚しいだけだろ。
306 :
仕様書無しさん :2001/08/11(土) 21:04
>> 292 確かにイタイ。 普通は素直に killall まあ pidof で調べてから kill してもよい。 こういうものが使えないOSもあるし ps 結果を grep したっていいんだが、 一番の問題は 292 はバグっていることだ。
307 :
仕様書無しさん :2001/08/11(土) 21:36
30行規約があるので、開発者はDOS窓でVZかMIFES、 もしくはEMACSかVIをターミナルで使ってください。
>>307 telnet端末スレのemacs基地外さんと同一人物だったらemacs以外と並べるなヴァカと
怒られてしまいます。
309 :
しょわぁ〜 :2001/08/13(月) 11:52
ココに書いてあることで、内容に突っ込みを入れられないようだと、 プログラマとして終わっている・・・ってことっすか? ・・・・・・ヤヴァ!何個か、わからねぇ。
ツッコミ入れれないのはいいけど、矛盾を感じない、 えっそれ常識でしょ? なんて言ってたらダメだめやね
/* if (条件文) { *//* 処理 *//* } else { *//* 処理 *//* } *//* */ こうやってコメントアウトされてた。
// return (0); return (-1); // エラーじゃゴルァ
#include <math.h> #include "math.h" ファイル名別にしてくれ〜
314 :
仕様書無しさん :2001/08/17(金) 08:55
20Tabと16Tabと0Tabをつかってる キティなソースをみた。
315 :
仕様書無しさん :2001/08/17(金) 08:56
くっさい男がいたもんだー まーちでばったり 出会ーたらー こーれはー たまらん 逃げ出そうー ひーろゆきーくーさいー 電車にのーるーなー あーんたーがー一番ー キムタクー二番ー はっ! どんどん !
sage
/* #世界に広げよう♪# あなた コンピー辞めますか? それとも 人間辞めますか? みつお */
318 :
VB :2001/08/17(金) 22:58
Select Case 変数 Case 1 If 変数 = 1 Then Call subproc1 End If Case 2 If 変数 = 2 Then Call subproc2 End If Case 3 If 変数 = 3 Then Call subproc3 End If End Select
319 :
名無しおやぢ :2001/08/18(土) 10:55
>>318 たぶん、何も考えずに条件反射(?)で手だけ動かして書いたのでしょう。
サル並みの知能ですな。(藁
320 :
仕様書無しさん :2001/08/18(土) 11:45
>>318 あいかわらず比較演算子と代入演算子が同じだなVBは。
321 :
/名無しさん[1-30].jpg :2001/08/19(日) 23:44
if(XXX) { AAA BBB if(YYY) { CCC DDD } } こういうインデントつける人やめて欲しい
322 :
dj :2001/08/19(日) 23:51
>>321 そりは、GNU のストール万が布教している書き方だな。
323 :
仕様書無しさん :2001/08/20(月) 00:13
VBのSelect文って(他の言語でもそうなのかな?) Select x Case 1 処理1 Case 2 処理2 End Select ↑みたいに、 SelectとCaseでインデント2個分下がるから嫌なんだけど なんかいいアイデアある?
324 :
323 :2001/08/20(月) 00:14
ごめん。まちがえた。 Select Case x Case 1 処理1 Case 2 処理2 End Select だね。逝ってきます。
325 :
仕様書無しさん :2001/08/20(月) 00:15
Select x Case 1 処理1 Case 2 処理2 End Select で、いいだろ
327 :
仕様書無しさん :2001/08/20(月) 00:50
>>323 325になると見にくい。2個インデント(・∀・)マンセー!!
遅レスだが #define BIT(n) (1 << (n)) ではだめなのか?
>>328 いっしょに作業する仲間にもよると思うけど、
素直に直に書くほうがいいかと...
それに、#defineは、多用しないほうがいいとおもわれ..
>>328 これくらいは普通だよな。
この define くらいは社内共通で使うインクルードファイルに
入れてもおかしくない程度の基本だと思う。
331 :
仕様書無しさん :2001/08/20(月) 19:34
#include <stdio.h> #define CALL int main() { CALL printf("hello, world\n"); return 0; } なぜだか知らんが関数を呼ぶときは CALL を関数の前に付けることになっている。 関数を呼ぶことを明示的に記述することにより 読み間違いを防ぐ効果があるという理由から。 if (...)、 for (...) など関数と間違えるかららしい。 アホだ・・・
333 :
名無しおやぢ :2001/08/20(月) 21:10
>>331 VB(A)なら一理も二理もありますけど、Cでマクロ定義してまで、というのは
どうも・・・ね。
(Pascal風マクロを思い出してしまった。激しくガイシュツですが)
>>331 アセンブラかCOBOLから来てるのかなあ?
C言語に手を出す資格のない会社ですなー。
>>331 凄いな。間違えるって、、、、
その職場の人たち、人の名前呼ぶ前に
(男性の)前田係長、今日飲みに逝きましょうよ!
とか
(女性の)秋本先輩、彼氏元気ですか〜?
とか喋ってそうだな(w
336 :
仕様書無しさん :2001/08/20(月) 23:16
>>331 すっすごすぎる・・・・
if()とかforを関数と間違えるなんて・・・・
むしろ、そんな会社に入ってみたい(藁
体験入社できないかな?
>>331 #define IN
#define OUT
#define INOUT
int foo(IN int hoge1, OUT char *hoge2, INOUT char *hoge3)
とかいうのも見たことあるな。
>>337 そんな気休めにしかならないマクロは、むしろ「マクロ定義と実際の
使われ方が違っていても、エラー一つ出やしない」という点で、有害
なだけだと思うんだがなぁ。本気でやるなら、エラーを検出できるプリ
プロセッサでも作らないと。
それなら const でも付けたほうが 256 倍マシだね。
>>337 でもうちだとどうせコメントでINとかOUTとか書いてるからそっちのほうが
楽でいいかも。
340 :
仕様書無しさん :2001/08/21(火) 01:13
"if"や"for", "while"と"("の間には必ずスペース入れる人を見たことあるな。 関数にはスペースを入れないことで、視覚的に区別できるとか逝ってたぞ。
それは俺のことか?
>>340 あ、関数にもスペース入れるけどな。1行目に関しては俺と同じだ。
if for while の後ろにはスペース空けてるよ。普通じゃないのか? 関数のときは空けないよ。あとからマクロになったりすると困るから。
そういう無駄な冗長性のある書き方は好かん
>>340 BSDスタイルとかいう奴だっけか。
最近慣れてきた……。
>>337 CORBA みたいだな。
>>343 どこが冗長性なんだ? 可読性のためだろうが。
>>344 っていうか K&R 流の流れを汲んでいるかもな。
346 :
仕様書無しさん :2001/08/21(火) 10:12
皆さんconst付けていますか? わたしは気合を入れた下位層を作るときしか 付けてないんですけど。
347 :
仕様書無しさん :2001/08/21(火) 10:40
>>340 MSのVisualStudio使ってるからあんまり考えたことないな。
色づけしてくれるし。
>>346 ローカルな関数にはつけないけど、共通サブつくって、といわれた時は、つけるようにする。
また、後輩君に見られそうなときは、極力つける。
349 :
仕様書無しさん :2001/08/21(火) 10:57
ループがベタ展開されていたとき。しかも1000行を超えて鬱だ氏。
>>346 関数パラメータのconst char* みたいな場合はつける。
constつけない関数書いて、あとで別のところで使おうとしたとき
上位も下位もconstついててうまくはまらないことがあった。
ライブラリ関数にもconstついてるしconstなものはconst付きで
統一したほうがいいと思っている。
メンバ関数() const;はつけない。
派生クラスでメンバ変数いじりたくなったとき困るから。
351 :
仕様書無しさん :2001/08/21(火) 13:13
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "hensuu.h" #include "kansuu_head.h" #include "main.c" #include "graph.c" #include "sub.c" #include "keys.c" #include "filefile.c" これには流石に参った。
>>351 実はワクワクしながらsub.cあたりを開けてみただろ?
>>353 まあね(w
なんでも、makefileの記述方法わからなかったからこうした、という話だった。
355 :
仕様書無しさん :2001/08/21(火) 19:53
filefile.cがフラフラ.死に見えてしまう
356 :
仕様書無しさん :2001/08/21(火) 20:45
filefile.cってどんなプログラムが詰まってるんだろ・・・。 ほかのは想像できるが・・・・。 ところでhensuu.hってなんだ!? うーん・・・こんなことしやがるならmakefile作れなくても手でやってくれたほーが・・・。 というより、普通makefileの書き方勉強するだろ・・・。 なぜ、こんな手段にうってでた!?
357 :
旅人プログラマ :2001/08/21(火) 21:40
>>356 意外といるのよ、その場しのぎでincludeする人が…
っていうか、過去の私もそういう事していた(w
358 :
仕様書無しさん :2001/08/21(火) 21:51
>>351 #include "L1-100.c"
#include "L101-200.c"
#include "L201-300.c"
(中略)
#include "L2201-end.c"
これよりかは圧刀b的にマシ…
もちろん、皆さんの想像どうりmain関数をきれいに100行ごと
にファイルに分けただけです。
359 :
仕様書無しさん :2001/08/21(火) 21:54
360 :
♯6411 :2001/08/21(火) 22:08
>>346 >>350 漏れは char const *p のような書き方が好きだ。
時々、人を罠に陥れるために、
char const *const p とか掻いてみる(藁
>>356 単なる、そのプロジェクトで使用するファイルを操作する関数群だった。
file.cでは何か問題が起きるかもしれなくて恐いからfilefile.cにした、と
真顔で言われて・・・当時は「俺が間違っているの????」と真剣に悩みそうになった。。
362 :
仕様書無しさん :2001/08/21(火) 23:19
コードのインクルードは、大学の研究室(情報系ではなく電子系の 計測用)のソフトでしか見たことないなあ。 就職してからはないぞ。
>>362 俺は学生時代も見たことなかったよー
社会人になってから、お役所な”前もそうだから変えようと思わない”のが常識な人が
いる職場もいっぱい見てきた。
対応OS:Windows95
え、Win98は無視しているんですか? と聞いたら「だって前も95だったし」「98入れても同じだと思うし」「95で動くなら98でも動くだろ」
とかいう人もいたしねー。
364 :
仕様書無しさん :2001/08/22(水) 00:09
コードのインクルード… DOSの頃は結構見かけたぞ。統合環境なしだと make の 使い方がわからんから、と言ってやってる人がいた。 その頃の習慣を今も引きずっているのではない?
365 :
仕様書無しさん :2001/08/22(水) 00:12
研究室も会社も、ピンきりってことだよ。 NEC-98の寿命がつきつつある頃、N88-BASICで書かれた 計測用のコードが現役だった研究室も珍しくないからね。 (今はしらん) ガイシュツだけど、就職して"Warning"をワーニングと読むのを 聞いたときは萎えたな。
環境のせいでmake使えなくても、せめてシェルにコンパイラの 実行パラメータ書いておくくらいはできると思うんだが…
367 :
仕様書無しさん :2001/08/22(水) 00:16
最近のマシンは早いからまだしも、286とか386の時代だったら、 コンパイルにすんごい時間がかかるんでない??
人によって、何が読みやすくて何が読みにくいっていう基準が違うから こういう議論になるのかも。 俺は1画面になるべく大量の情報を入れる事と、各トークンの見やすさの トレードオフを重視してる。 で、俺が書いたソースをを他の人間が見ると 「**さんのソースって圧縮率高いっすねー」 って言われるよ。鬱だ・・・
369 :
仕様書無しさん :2001/08/22(水) 01:07
makefile知らなくてもバッチファイルで出来るじゃねーか・・
>>367 Win3.1の頃は、コンパイル開始!さー40分何もできないな。
みんな休憩だ休憩! ってのが黙認されてたっけな
371 :
仕様書無しさん :2001/08/22(水) 12:51
ちと悲しくなったコーディング前にきたメールの文章 担当者はデファイン名にカナ読みをなるべく使わないようにして下さい。 従来のデファイン名で流用出来るものがあればなるべく流用して下さい。 デファイン名が重複することのないよう注意して下さい。 デファイン名って…。
372 :
仕様書無しさん :2001/08/22(水) 12:56
続いて #define MODE_1 0x0101 // 注意!ここはHEXで書かれています!DECではないので間違えないように!! #define MODE_2 0x0011 // 注意!ここはHEXで書かれています!DECではないので間違えないように!! #define MODE_3 0x0111 // 注意!ここはHEXで書かれています!DECではないので間違えないように!! 0xで書かれてるのに10進数だと思うバカがどこにいるんだよ…
373 :
仕様書無しさん :2001/08/22(水) 13:00
更に 「当プロジェクトはマルチタスクな処理になっています。 担当者は前回の処理の流れを解析し、タスクについて理解した上で 作業を行うようにしてください」 main( ** ) { if( flg & MODE_1 ) start_mode1(); if( flg & MODE_2 ) start_mode2(); if( flg | MODE_3 ) start_mode3(); ・・・マルチ?タスク??
ちょっとずれるけど一応ソースの話ってことで。 これ移植してね、とソースを渡された。 ためしにビルドして動かしてみたら出荷済みの製品と動作が違う。 これ本当にリリース版のソースなんすか?と聞いてみたら リリース版のソースを担当者がいじった奴との回答を得た。 リリース版のソースは存在しないとのこと。 パッケージなんすけどこれって普通?
>>372 それは、間違えた奴が実際に居たからだと思うぞ。
376 :
仕様書無しさん :2001/08/22(水) 15:16
>>374 普通ではないし、普通と思いたくもないが聞いたことも見たこともあるな。
ソースコード納品しないような職場だと、「履歴残してるからいいじゃないか」
「VSSで管理しているからいいじゃないか」と真顔で言う人がたまにいます。
以前いた職場なんて、テストデータは正常動作が認められたら破棄してた。
3時間かかって作っても一瞬で破棄。バグ見付かったらまた3時間かけて作成。
無駄の極地だったのでバックアップとっておいたら「テストデータを作るのも
仕事のうちだ」と訳のわからん説教されたことがある。
377 :
IWGPベビー級王者 :2001/08/22(水) 15:22
漏れが以前勤めていた某地図情報システムの会社。 お客様に納めた製品のソースを無くしたらしい。 そのとき社長が逝った言葉は、 「ほっとけ」 辞めたあとに聞いたが、辞めたくなるよ。
378 :
仕様書無しさん :2001/08/22(水) 16:01
>>376 テストデータを造ることくらいしか出来ないアフォの仕事を
取るなという意味だと思われ(藁
379 :
仕様書無しさん :2001/08/22(水) 16:17
>>376 >「VSSで管理しているからいいじゃないか」
その通りだと思うが?
必要なバージョンでチェックアウトせれ
381 :
376 :2001/08/22(水) 17:04
VSSでバージョン管理しててもサーバーのバックアップを 全然取ってない環境なのであった。説明足らずでスマヌ。 製品出したら、一度ぐらいバックアップとれっつーの。
やっぱ出荷したらソース保全するのが当たり前だよね。 自分の時は当の担当者が他社出向中で、仕方がないので上司に、 出荷時のソースからの変更点だけでも分からないか、 ってしつこく聞いたら「ぐだぐだ言わずに納期までにやれ!」とか言われたよ・・・。
>>378 の文章の意味をきちんと理解できるわしも
日本語学校に行った方がいいのかのぅ
384 :
仕様書無しさん :2001/08/22(水) 21:31
をい。今、ウチのPGからあがってきたコード見てたら、 ノードの意味で、 #define SAVE_NODO 4 と書いてあったゾ。農道じゃないんだから・・・ それに、括弧で括ってほしいな。
385 :
仕様書無しさん :2001/08/22(水) 21:46
>農道じゃないんだから・・・ これは書かないほうが良かった その上で >いや、括弧の問題じゃないだろ と後続の人につっこんでもらえれば完璧
386 :
旅人プログラマ :2001/08/22(水) 21:52
>>384 Const B_KOUDO = 1
っていうのがあったなぁ…(鬱
387 :
仕様書無しさん :2001/08/22(水) 22:05
テンパってるな。
388 :
仕様書無しさん :2001/08/22(水) 22:35
(#define SAVE_NODO 4)
390 :
仕様書無しさん :2001/08/22(水) 23:23
>>390 定数マクロは括弧でくくった、方がよい、ことが多い。
漏れは、演算子の付かない単項定数はくくらない。
392 :
仕様書無しさん :2001/08/22(水) 23:38
>>391 >定数マクロは括弧でくくった、方がよい、ことが多い。
それは何故?マジでわからん。
マジレスキボンヌ
393 :
仕様書無しさん :2001/08/22(水) 23:45
394 :
ヲレしょぼ :2001/08/22(水) 23:53
>351くらいから、話しについていけないヲレは、失格ですね・・・。 ↑のカッコの件も、ワケワカラン・・・デス。
395 :
仕様書無しさん :2001/08/23(木) 00:02
入門書でもマクロの副作用って載ってると思うけどなぁ そういう俺も例挙げれないけど
397 :
仕様書無しさん :2001/08/23(木) 00:04
#define TEST1 (2+3) #define TEST2 2+3 の時 a = TEST1*2; b = TEST2*2; ↓ a = (2+3)*2; b = 2+3*2 と展開される。 ということだと思う。
>>395 なるほど。サンクス。
そういうのそういえば読んだこと有るような気がしたけど、
そんなややこしいマクロはバカらしくて書かないので気づかなかった。
const int TEST1 = 2+3; でいきましょうよ
↑メモリ多い時代だからといって、そこまで無駄なことはするなよー
401 :
仕様書無しさん :2001/08/23(木) 03:50
>>400 何が無駄なんだか。デバッグ用のシンボルテーブル?
403 :
仕様書無しさん :2001/08/23(木) 07:25
enum { I = 1+2, MY = 2+3, ME = 3+4 }; # で逝きましょうよ
>>400 コンパイルの時点で計算されるだろ、フツー。
define使わずに極力
>>399 みたいにやるけど。
まず最適化してくれるし。
406 :
仕様書無しさん :2001/08/23(木) 10:02
>>404 C++だと最適化されるけど、Cだと実体が確保されちゃうでしょ。
でも、よっぽどメモリが貴重な環境でなければconstを使った
ほうがいいと思うけどね。
407 :
仕様書無しさん :2001/08/23(木) 10:27
>>406 Cだと実体が確保されるのは解るけど、C++じゃ違うのか?
どのように「最適化」されるのか説明してくれ。
>>407 コンパイル時に値が決定されていて、他からアドレスを参照されない場合は実体が確保されない。
「プログラミング言語C++第3版」の「5.4章定数」で説明されてる。
>>408 ふーん、勉強になったよ。ありがとう。
その値を参照するコードの部分に値が直接埋め込まれるワケね。
410 :
仕様書無しさん :2001/08/23(木) 11:06
define とほとんど変わらないね。
411 :
400 :2001/08/23(木) 12:13
ま、そういうことだ。わかったか低脳ども
412 :
仕様書無しさん :2001/08/23(木) 17:26
int i1,i2,i3,i4,i5; for(int i = 1 ; i <=5 ; i++){ if(i == 1) i1 = ...; if(i == 2) i2 = ...; if(i == 3) i3 = ...; if(i == 4) i4 = ...; if(i == 5) i5 = ...; }
414 :
412 :2001/08/23(木) 17:47
書いた本人曰く 「同期の中じゃできるほうだと思います」 ちなみに入社4年目
415 :
:2001/08/23(木) 17:47
>411 Cでも処理系によちゃ確保されないよ。 C++の最適化はCで研究成果があがってる物をまとめた物だから。
a[1] = ...; a[2] = ...; a[3] = ...; ..... a[20] = ...; とやってるやつがいたので 「なんでループで回さないんだ?」と聞いたら (すごい得意げな顔で)「こっちのほうが早いんですよ」と言われた。 ちなみに彼は当時30歳....
418 :
名無しおやぢ :2001/08/23(木) 18:45
>>417 >「こっちのほうが早いんですよ」
実行速度のことなのか、完成速度のことなのか・・・?
(いずれにせよ、DQN・・・)
419 :
:2001/08/23(木) 19:31
いまどき実行速度なんか気にするのか? いまどきは実行速度より開発・改良速度だろ。
420 :
>419 :2001/08/23(木) 20:14
>いまどき実行速度なんか気にするのか? まだ気にするところはたくさんあるよ 遅いの使ってる仕事まだあるって
421 :
♯6411 :2001/08/23(木) 20:16
>>420 ループの外側とか初期化部分を
執拗に高速化してるのは、推測するに、
原始人と思われ。
(420氏へのあてつけではないので念のため)
>>419 何を作っているかによるだろ>速度
変換ツールや通信ソフトで実行速度が気にならないって言い切れますか?
423 :
仕様書無しさん :2001/08/23(木) 20:19
案件の要求上必要ならチューニングすること もあるけど、20-80の法則くらい知ってろよ、 と思うけどなあ。
20-80の法則って何? 10-90ルールなら知ってるんだが…
30-70とか40-60つーのもあるぞ
>422 そんなさーソースのちょっとしたとこ(ループ使うとか..) 変えたぐらいで、速度なんか変わんないよ。 実行速度の問題は、設計段階で検討ついてないと、終わってるよ。 いやいや、エスケのこと言ってるんじゃないよ...
塵もつもれば山となる、そーゆーものです。
428 :
仕様書無しさん :2001/08/23(木) 20:43
>>427 可読性最優先でコード書いて、性能試験でプロファイルとって
やばいところだけチューニングするのがスマートです。
しらみつぶしなんて、コスト意識のないアフォの仕業。
>427 そんなさー数百ミリ節句の間に、 何十回も呼ばれるよーなサブルーチン、 おいらは書いたことがないよ。 普通ーライブラリにあるようなものを利用するんじゃないの?
>>399 -401
C だと const 定数は配列添字数指定に使えないのでは?
431 :
仕様書無しさん :2001/08/23(木) 21:14
組み込み分野の話かもしれないよ。
その通り。 ns〜μsを争う処理を書いてると、数百msなんて途方もなく長い時間だよ。
433 :
417 :2001/08/23(木) 21:51
ちなみに... (すごい得意げな顔で)「こっちのほうが早いんですよ」と言った彼が 作っていたプログラムは夜間に出力する帳票プログラムです。
(ぎゃふん
435 :
仕様書無しさん :2001/08/23(木) 22:03
私が今までで、一番ひどかったと思うソースは こんな感じです。 作ってた外注のオッサンが、途中で仕事を放棄して 俺が、この保守・拡張を任された時はマジ辞めようと思った。 結局、すべて1から作り直したのですが・・・・。 全部で30000行くらいあったんですが。 4000行くらいに小さくなりました。 皆さんには、こんなプログラムが回って来ない事を祈ります。 ・15個くらいのプログラムの各ソース(平均2000行)はmain関数のみしかない。 ・変数は何故か全てグローバル定義 ・ヘッダーファイルがなく、マクロは全てソースファイルに定義している。 ・変数の名前のつけ方が適当。( char sagyou1[256]〜sagyou30[256]とかまである ) ・なぜか変数の型を大文字でtypedef定義している( char -> CHARなど) ・ソースファイルの名前のつけ方が適当 ( proc1.c/proc2.pc等) 何のプログラムは分からん・・・。 ・コメントと実際にやっている事が違う。 ・ドキュメント(SS/PS)と実際のプログラムの動きが全然違う。 ・謎のコメントが残っている( /* ココは変換していいのでしょうか? */ 等 ) ・あまりにドキュメントが意味不明なので、逃げた本人に電話で仕様を確認すると 「私もよく分からないんですよ・・・。」と言われた。
436 :
:2001/08/23(木) 23:24
>>433 いや〜お兄さん一本取られちゃったな(藁
はっはっはっは〜
ってな感じの昔のホームドラマのオチのような話だな。
426はプログラマーにあこがれている中学生と見た!(・▽・)
439 :
仕様書無しさん :2001/08/24(金) 00:02
>>435 >・15個くらいのプログラムの各ソース(平均2000行)はmain関数のみしかない。
たまに見る
>・変数は何故か全てグローバル定義
よく見る
>・ヘッダーファイルがなく、マクロは全てソースファイルに定義している。
よく見る
>・変数の名前のつけ方が適当。( char sagyou1[256]〜sagyou30[256]とかまである )
かなりよく見る
>・なぜか変数の型を大文字でtypedef定義している( char -> CHARなど)
よく見る。
>・ソースファイルの名前のつけ方が適当 ( proc1.c/proc2.pc等) 何のプログラムは分からん・・・。
かなりよく見る
>・コメントと実際にやっている事が違う。
正しいとこのほうが少ない
>・ドキュメント(SS/PS)と実際のプログラムの動きが全然違う。
よく見る
>・謎のコメントが残っている( /* ココは変換していいのでしょうか? */ 等 )
たま〜〜〜に見る
まだまだ世間の厳しさを知らないね。
まあ、知らないほうがいいよ。心荒むからサ。。
・あまりにドキュメントが意味不明なので、逃げた本人に電話で仕様を確認すると
「私もよく分からないんですよ・・・。」と言われた。
440 :
仕様書無しさん :2001/08/24(金) 00:11
>439 いったいどんなヒドイ目に!!?
441 :
仕様書無しさん :2001/08/24(金) 00:11
>まだまだ世間の厳しさを知らないね そりゃそうだろうけど、みんな「俺だけはこんな事しねぇぞ!」と思いつつ、やってる訳じゃんか。 助長するような書き方やめろ。業界のガンになるぞ。
442 :
sage :2001/08/24(金) 00:14
>439 typedefは、intやlongなんかのサイズが変わっても 応急措置でそのまま動かせるようにするっていう保険だと思われる。 が、その意義を理解して使っているかどうかははなはだ疑問だ。
>>438 そーかー?
そもそも、開発中に「ループ」→「ベタ書き」に変更するってのなら話がわかるが、
いきなりでしょ?
Z80CPUで開発してるわけじゃないから、
ループで書けるところは書けばいいんじゃないの?
>>442 typedefってそんな考え方で使ってるの?
そんなソースは読みたくないなぁ。
#defineでやる方が多かったけど、typedefを使う人もいたよ。 でも、実際に、Cで移植性や互換性を考えた実用コードを書くのは 難しいし、やりすぎちゃって、かえって見づらくなることも多いと思う。 たぶん、そういうコードを見た&書かされてたひとが、 習慣や思いこみで、こういうもんだ、と思ってtypedefしてたんじゃないの?
446 :
439 :2001/08/24(金) 01:52
すまん、最後1行忘れてた(ワラ >(引用) 何度か経験している
コメントでreadの過去形がreadedになってたことが…
他にもいろいろスペル・文法ミスがあった。 別に英語のコメントが求められている開発ではなかったんだが…。
449 :
仕様書無しさん :2001/08/24(金) 02:29
なんかすごいな。みんな本当の話なのか・・・ プログラマーって誰でもなれるの?一応勉強してから就職するんでしょ?
>>449 ウチが元いた会社は何年も前から、パソコンに触った事がないヤツらを
プログラマーとして採用してたよ。
電源の入れ方、Windows・Word等の使い方から、
プログラムのコーディングまで、3ヶ月の研修期間で教える。
>>450 ワシの今の会社がそんな感じだけど、、、
研修1ヶ月未満。
そんなんじゃ、まともなプログラムは出来上がらんだろ。。。
鬱だ。
452 :
仕様書無しさん :2001/08/24(金) 04:26
それはまたありがたい会社ですね。 未経験者募集とか見かけるけど、趣味で相当やりこんでる人を相手に してるのかと思ってたよ。 人材不足なんですかね。
>>417 Intelのコンパイラを使うと自動的に
小さいループはこうなる
LOOP IS VERTECTED
>>449 人間誰でも見かけだけは大人になれるようなもんです
455 :
仕様書無しさん :2001/08/24(金) 10:20
>>450 -451
そんな会社が他にもあったとは!!
・・・まさか、ウチの会社のことかな?
456 :
来年就活さん :2001/08/24(金) 10:24
中学の時から六年くらい一人でシコシコとプログラムやってて、 さすがに馬鹿なコードは書く前に気づいたりできるぐらい成長したつもりですが、 グループ開発の経験が無いので、正直な話、こういう現場の生の声って勉強になります。 もっといろいろ聞かせてください。
457 :
仕様書無しさん :2001/08/24(金) 11:04
>>456 馬鹿なコード〜の判断基準が根本的に業務用(用途別でさらに細分化)と個人用(その本人もしくはグループ内だけ)とえらい違うことを前提としてもっておくと、すんなり社会になじめるもんぢゃ。
例:「あるプログラムをつくるとき」
個人:「動いてなんぼ」
業務:「他人がみてわかりよいソースでなんぼ」
458 :
仕様書無しさん :2001/08/24(金) 11:29
ソースの途中でいきなり#define ってありなの? main() { 通常の処理 #define Flag1 = PIO1.PORTA.BIT0 Flag1 = 1; 以下続く } って感じだったんだけど... 定義位置と使う位置が離れると分かりにくいから? 上までスクロールさせて#define書き込むのが面倒だから? ちなみに組み込み系です。
459 :
仕様書無しさん :2001/08/24(金) 11:56
>>458 C++ならconstが常道。型付きだし。
Cでも衝突に配慮してあれば特に問題ないと思う。マクロ名の頭が
関数名になってるとか。
error C2143: 構文エラー : ';' が '=' の前に必要です。
461 :
仕様書無しさん :2001/08/24(金) 13:16
>>450 >>451 私の会社なんか研修すらないよ。
まともじゃないプログラムがほとんどかも。
鬱だ。
462 :
来年就活さん :2001/08/24(金) 14:24
>>457 >動いてなんぼ
おっしゃられている通りです(汗
バイトなどで経験を積められればいいんでしょうけど…
紹介される仕事がHTML書きだけだったりします。
それに自分の現状では、コードを公開しろと言われても困りますし。
裸体を晒すのがハヅカシイのと同じ感覚でしょうか。
今は「半年後に見た時にすぐわかるコード」を目標に頑張っているので、
変数名の名づけ方とかの議論、面白かったです。
自分は基本はハンガリアン、気に食わない部分は自己流です。
たとえば、クラスのメンバ変数にm_は付けていません。
話は変わりますが、charのポインタ変数に付けるszってどういう意味があるんでしょうか?
独学が長かったので、専門用語に関してはわりと無知です。
怖いので付けていませんが。
463 :
仕様書無しさん :2001/08/24(金) 14:56
>>462 >話は変わりますが、charのポインタ変数に付けるszってどういう意味があるんでしょうか?
zeroで終端されたstringってことでないかな。
ハンガリアン論争は荒れるのでやめようよ....
>>462 > 自分は基本はハンガリアン、気に食わない部分は自己流です。
(中略)
> 話は変わりますが、charのポインタ変数に付けるszってどういう意味があるんでしょうか?
アフォ、szもいわゆるハンガリアン記法じゃゴルァ
あー痒い痒い痒い…ぞぞぞっ
みんなも、ハンガリアン記法でコーディングしよう。 Charles Simonyi マンセー!
ハンガリアンチョップ
ハンガリー精神マンセー
469 :
仕様書無しさん :2001/08/24(金) 18:04
ハンガリアン 上ゲ
サンガリヤおいしいお茶
ハンガリーチキン
472 :
仕様書無しさん :2001/08/24(金) 20:13
はんがりぁん
カンブリアン? ガ━━(゚Д゚;)━━ン!
そうですか。自分はローマ字アンであります。
はんがりーをばかにするな
つぶあん、ねりあん、赤毛のアン
477 :
:2001/08/25(土) 01:06
♪めりーあん、めりーあん、めりーあん、うぉんちゅーすていふぉーみー
478 :
かけだしちゃん :2001/08/25(土) 02:47
ハンガリアンのせいで、荒れとるやんけ。
えいごりあん
480 :
がんばりやん :2001/08/25(土) 06:53
ハンガリアンを採用してるプロジェクトであれば従うまでです。
モンゴリアーーーン!!
>462 >話は変わりますが、charのポインタ変数に付けるszって 人が土下座してるところです。
483 :
仕様書無しさん :2001/08/25(土) 10:13
>>439 >>435 >・15個くらいのプログラムの各ソース(平均2000行)はmain関数のみしかない。
まだ見たことない
>・変数は何故か全てグローバル定義
まれにある
>・ヘッダーファイルがなく、マクロは全てソースファイルに定義している。
まだ見たことない
>・変数の名前のつけ方が適当。( char sagyou1[256]〜sagyou30[256]とかまである )
かなりよく見る
>・なぜか変数の型を大文字でtypedef定義している( char -> CHARなど)
まだ見たことないが、
TRUE=0 FALSE!=0
SUCCESS=!0 FAIL=0
がさりげなく定義されているのをかなりよく見る
>・ソースファイルの名前のつけ方が適当 ( proc1.c/proc2.pc等) 何のプログラムは分からん・・・。
たまに見る
>・コメントと実際にやっている事が違う。
そもそもコメントがない
>・ドキュメント(SS/PS)と実際のプログラムの動きが全然違う。
そもそもドキュメントがない
>・謎のコメントが残っている( /* ココは変換していいのでしょうか? */ 等 )
かなりよく見る あと愚痴がたらたら書いてあったりする
>・あまりにドキュメントが意味不明なので、逃げた本人に電話で仕様を確認すると
>「私もよく分からないんですよ・・・。」と言われた。
「もう引継いだので知りません(責任はうちにないので面倒みないよの意)」とよく言われる
大抵の場合、作ったところから引継いだのは俺じゃなくて俺に依頼してくる『ソフトは誰かが自分の意思を
読み取っていつのまにか作ってくれる』と漠然と信じているメカ屋
「俺ソフトわかんないから向こうの担当者と相談して」ときたもんだ
おめぇは図面も仕様書もテスト報告もないメカが入ってきて検収もせずに引継ぐんか?ゴルァ!
484 :
とねぞう :2001/08/25(土) 10:18
なんてこったい。 > grep goto ./*.c | wc -l 35
485 :
とねぞう :2001/08/25(土) 10:28
共通関数から自作関数をコールされているのを見たとき ああ、これはイジメなんだな。 と思った。
486 :
仕様書無しさん :2001/08/25(土) 10:46
>>483 >>・コメントと実際にやっている事が違う。
> そもそもコメントがない
これってコメントないほうがまだ幸せだよね。
487 :
仕様書無しさん :2001/08/25(土) 14:43
>>3 ワラタ
考えたやつすごいな
前の会社のアホ上司ならやりそうだが..
488 :
仕様書無しさん :2001/08/25(土) 14:50
>・なぜか変数の型を大文字でtypedef定義している( char -> CHARなど) 制御系だとたまにやるらしい。intをINTとか char->CHARはjavaとのクロス環境か?(笑
489 :
仕様書無しさん :2001/08/25(土) 15:22
int CANSEL はぁ
>・あまりにドキュメントが意味不明なので、逃げた本人に電話で仕様を確認すると >「私もよく分からないんですよ・・・。」と言われた。 // もし判らない時は090-XXXX-****まで電話して下さい // 可能な限りお答えします マジかよ?と思って電話したら通じた。2年前のソフトで・・。 でも「もう憶えてないので電話しないでください。あと、それ消しておいてください」と 言われた(w
491 :
仕様書無しさん :2001/08/25(土) 16:23
char -> CHAR ならまだ読めるけど B とか UB とかは勘弁してほしいよ。
B? Byteか?
493 :
仕様書無しさん :2001/08/25(土) 19:31
ま、書き方がどうであれ仕様通りに動くんならいいよ、まだ。 協力会社の人間の作ったバグとりに今日も休日出勤だよ、ふう。
496 :
仕様書無しさん :2001/08/26(日) 04:08
>>490 その人を責めるなよ・・・・
2年ね月日が彼を変えたんだよ・・・・(藁
497 :
496 :2001/08/26(日) 04:28
間違えた、下記に修正ね。
俺を責めるなよ。酒が俺を変えたんだよ・・・・(鬱
>>490 その人を責めるなよ・・・・
2年の月日が彼を変えたんだよ・・・・(藁
いや、ソースコードに電話番号を書くのうがバカ。
499 :
仕様書書かないさん :2001/08/26 06:59
> TRUE=0 FALSE!=0 > SUCCESS=!0 FAIL=0 > がさりげなく定義されているのをかなりよく見る FALSE!=0 は単なる書き間違いだよね。
500 :
仕様書無しさん :01/08/26 12:10
>>495 私も、協力会社として仕事をしているけど、貴方のところはどういう契約になっているの?
瑕疵が無くなるまでトコトン付き合う、という契約が普通じゃないの?
仕様通り動かないなら、突返すか製造者を呼びつけるのが普通ですよね。
私は、結合試験から客先検収まできっちり立ち会うのが殆どですし、
結合に先駆けて一部分を早い時期に納品する必要がある際には、
試験用プログラムを添付して、仕様通りに動作していることを納品先の担当者
立ち会いの下に確認して納品というのが普通ですよ。
作りっぱなしでベイルアウトという作業形態があるのが信じられないのですが。
>>500 言ってることはとても正しいと思うし、そうであるべきだと思う。
でも現実にできてない会社、ずっとやってないから問題とも感じない人が
大勢いるのは事実ですよ。
8年PGやってあちこち行ってきましたが、うち5年はそういう会社でした。
あ、私は495さんじゃないですよ
仕様をかってに変更してバグ扱いするやつがいるので 危険です。
void datacopy(void *dis,void *src) 鬱……いやぁ判らんでもないんだが……
504 :
仕様書無しさん :01/08/26 15:45
一番凄かったのはバグだらけなのに製品版として出荷したことでしょうか・・・ 私はC++で作成して、バグも無い状態だったのにVBに変更したから・・・ スクリプトもおかしくなってしまったし・・・ しかもバグが出たのを全部私の責任にして、辞めさせられたしね・・・ あんな会社、2度と行くか!! おまけに私が使っていた会社のPCにはredhat6.1jしか入れていないし、残りHDも100M切っているのにどうやってwindows入れろと? スペックも低いし・・・ CPU:pentium75MHz、メモリ:16MB、HD:1GB
俺が派遣で行ってた会社は、完成しているものを出来てないと言い張り どうしても作って欲しいなら値段上げろと途中でストライキみたいなことをして 客が他に依頼すると言ったらこのデータを世間にばらまくと・・・ 詐欺同様のことを社長と営業が平気でやってたとこがあったなあ。 社員は見てみぬふり。最低だった。 技術力が高いならともかく、VBでクラスの使い方さえ知らない会社・・・ もう潰れたけど。
506 :
仕様書無しさん :01/08/26 18:42 ID:ayKorCLw
>>503 それだけじゃわからん。
datacopy()がmemcopy()と同じ仕様で、memcopy()を使えと言いたいんか?
507 :
560 :01/08/26 18:45 ID:ayKorCLw
memcopy -> memcpy
508 :
仕様書無しさん :01/08/26 18:52 ID:YFCyBauc
>>506 引数がvoid *なのに、複写する長さの指定がないことをいいたいんじゃ ないのか?>>503は。
509 :
仕様書無しさん :01/08/26 19:06 ID:IUwPhXaE
dis じゃなくて普通 dst か、せめて des だと言いたいんじゃないのか?
>>503 は。
という、ツッコミどころ満載で欝なんじゃないのか?
>>503 は。
510 :
506 :01/08/26 19:41 ID:nQ.cJ8Uk
>>508 なるほど、それが正解かな?
でも、これ実行したらすぐに、まずいって気づくと思うんだが。
たまたま、動いていたんだろうか?
関数へのポインタじゃないの?
512 :
仕様書無しさん :01/08/26 20:33 ID:IKUko6.Y
>>503 は特定の構造体のポインタが渡されると仮定されていれば
使える..windowsのapiもよくやってるやつ
他にもいろいろ考えられるだろうけど
例えば
typedef struct obj1 {
...
}Car1;
typedef struct obj1 {
...
}Car2;
datacopy(void* data1 , void* data2)
{
if (sizeof(*data1) == sizeof(Car1) ){
....
}
else if(sizeof(*data1) == sizeof(Car2)) {
...
}
}
みたいな
Cは最近つかっとらんから細かいとこ町がっとるかも
まあ、使えるだけで、実装としては極力やらんほうがいいだろうが..
513 :
506 :01/08/26 20:41 ID:nQ.cJ8Uk
一応、
>>508 の考えが正しかった場合の話だよ。
話は、変わるけどIDが付くようになったね。
514 :
508 :01/08/26 20:49 ID:vbxqpDbk
515 :
503 :01/08/26 21:43 ID:6Zedsi5A
なんか色々物議をかもしてるようで…506,508,509さん正解です つーか固有データの固定量転送しかしないのになぜvoid*にしますか…
516 :
仕様書無しさん :01/08/26 21:45 ID:ckmvcpUo
>>512 >Cは最近つかっとらんから細かいとこ町がっとるかも
いかにも、昔は使ってたような口ぶりだけど、あんたど素人じゃないの?
sizeof をまったく理解してないじゃん。
そんな初心者っぽい間違いは久しぶりに見たよ。
517 :
仕様書無しさん :01/08/27 10:44 ID:nMN2ZLwk
>>516 ずっとC++やっとったよ..いまはjavaやけど
sizeofなんてそんなつかわんからね。細かい仕様なんて使う時にちょこちょこっと調べりゃいいだけじゃん
sizeofって変数の種類によって使い方がかわるからわかりにくいって有名だし
javaやってりゃんなくだらねーもんないし
sizeofにずいぶんお詳しいとのことで..さぞかしsizeofを詳しく理解していらっしゃるんでしょう
たいそうなこって
いっしょうセコセコ制御プログラムでもくんででくださいね
518 :
仕様書無しさん :01/08/27 10:48 ID:QY1C3w3s
別のファイルに全く同じメソッドが複数作ってあった
519 :
仕様書無しさん :01/08/27 11:26 ID:DlTH7712
んで、Warningってホントはなんて読むの?
520 :
仕様書無しさん :01/08/27 11:29 ID:7ZTVU0zE
ああ、了解。 鬱死。
522 :
仕様書無しさん :01/08/27 11:36 ID:o47JyrUo
523 :
名無しさん :01/08/27 11:45 ID:BV9MddMg
どうも、誤りを指摘されると自分の思い込みだけを根拠に開き直る夏厨が多いな。 まあ、もうちょっとで夏休み終わるから。
525 :
512 :01/08/27 12:25 ID:nMN2ZLwk
夏ぼーはキサマらやわ 俺はそーいうこともできるっつっただけでsizeofの細かい仕様がどーのっつー つっこみはどーでもいいわけだ まーそーいうツッコミいれるくらいしかのーがないわけだが
526 :
512 :01/08/27 12:27 ID:nMN2ZLwk
つーかwindowsのapiでほんとにあーいうことやってる部分があるの 知らんのだろう・・
528 :
508 :01/08/27 12:52 ID:BV9MddMg
Win32の構造体には、NETINFOSTRUCTみたいに先頭のメンバに その構造体サイズをセットするものがあるけど、それを扱うAPIのことかな?
>>525 >俺はそーいうこともできるっつっただけで
そういうことはコンパイルが通るプログラムを書いてから言え。
530 :
仕様書無しさん :01/08/27 13:05 ID:nMN2ZLwk
>>528 そう。で、構造体の種類によって動作が変わるapiがある
>>529 (ほんとにおばかねあなたはーと)
531 :
仕様書無しさん :01/08/27 13:06 ID:GxXqbfwM
たまに、異常に構造体の定義名が長いのがある。 なんか宣言するときに、かなり面倒な感じ。 typedef struct { .... ... } PROC_COMMON_AUTOMATIC_CHECK_FLAG_FOR_CLIENT_SYSTEM; とか。(あくまで例ね) あとは構造体がネストのネストのネストしまくってて 大本の構造体の中に30個くらい構造体があったり・・・。 しかも、どう考えてもそんなに要らない構造体ばかり。 実際、誰も使ってないし・・・。
532 :
仕様書無しさん :01/08/27 13:11 ID:7ZTVU0zE
533 :
508 :01/08/27 13:21 ID:BV9MddMg
>>530 けど、それにしたって、
>>512 のコードじゃ動作しないね。
void *をint *にキャストしてその数値と比較したら可。
ただし、前提として構造体の先頭メンバに既定の型(この場合intね。)
で構造体のサイズがセットされている必要がある。
もしくは、その構造体の型を特定できる識別子とか。
まとめ:
>>512 はsizeofを理解していない
多分ポインタを正確に理解できていないから
sizeofに変な誤解を持っている
>>529 は間違い
>>512 のコードはコンパイルだけなら正常に行える
# 意図した動作をしているかは置いておいて
535 :
512 :01/08/27 13:41 ID:nMN2ZLwk
>>533 うーんたしかに。間違ってた。voidにsizeofって・・
片手間で勢いで書いてるとこういうことになる・・
ご指摘感謝・・
>>517 >sizeofって変数の種類によって使い方がかわるからわかりにくいって有名だし
??使い方は同じだろう???
537 :
512 :01/08/27 14:17 ID:nMN2ZLwk
>>536 だね。使い方はいっしょ。戻り値の意味が異なる。
#include <stdio.h> /* stdio.hをインクルード */ こんなコメントはいらないと思いますー
>>512 あれだけみんなから指摘されても「夏ぼーはキサマらやわ」なんて喚いて、自分に
間違いがあると思いもしないんじゃ夏厨と言われても仕方あるまい。
おまけに、この期に及んでも「片手間で勢いで書いてるから」なんて言い訳に終始
してるようでは。
>>538 かといって、こんなコメントはもっとやだ。
#include <MyStd.h> /* stdio.hをインクルード */
512のってJavaのObjectで受けてinstanceofで判断してるつもりくさい Java房って言われてもしゃぁないな
542 :
529 :01/08/27 14:56 ID:rH3n9S2o
543 :
仕様書無しさん :01/08/27 16:31 ID:ENaaiiBA
>>512 の間違いを本人は、「sizeofの細かい仕様を覚えてない」で
片付けてるけど、枝葉じゃなくて根本を理解してないから、あんな間違い
をするんだろ?
Cでまとまったプログラムを書いたことのある人間なら絶対にあんな
間違いはしないよ。
512は入門書を読みかじって知ったかぶりをしてる厨房としか思えない。
544 :
仕様書無しさん :01/08/27 17:02 ID:QH29D3Bc
>>526 >つーかwindowsのapiでほんとにあーいうことやってる部分があるの
>知らんのだろう・・
そんなAPIはない。
具体的に、どのAPIか挙げてみろよ。
>512 はこうやりたかったんじゃ、ないだろうか? typedef struct OBJ1 { ... } Car1; typedef struct OBJ2 { ... } Car2; datacopy ( OBJ1 , void* ); datacopy ( OBJ2 , void* ); 間違ってたら、スマソ
547 :
536 :01/08/27 18:41 ID:ZTKqzTy6
>>512 =517=525=537
>>>sizeofって変数の種類によって使い方がかわるからわかりにくいって有名だし
>>??使い方は同じだろう???
>だね。使い方はいっしょ。戻り値の意味が異なる。
だね、じゃないんだよカス! お前の脳内狂ってると指摘してるのに・・・!!
あ、そうか、だから「だね」なのか。納得(w
548 :
508 :01/08/27 19:01 ID:BV9MddMg
夏だねえ・・・・(ワラ
>>537 戻り値?
sizeofを関数だと思ってる?
550 :
ネタ :01/08/27 19:42 ID:ElSN0SkA
>>549 > sizeofを関数だと思ってる?
関数でないとしたら何なんですか?
演算子などというたわけた事は言わないですよね?
ちなみにreturnも関数です。
さらにシッタカをかますとif(), while()は関数内関数です。
>>549 >>550 sizeofは演算子でないのはもちろんのこと、
関数ではありませんし、マクロでもありません。
sizeofは、神です。(藁
>549-551 もちろん、コンパイル時に定数になるわけがありません。
>>552 sizeofは神なんですが…
マジレス gccにて、
__builtin_constant_p(sizeof(int))
を評価してみると、
ちょっと楽しい鴨。
>>553 それは最適化レベルによって変わるんでわ?
いま手元にgcc使える環境がないんで確認できないけど…
555 :
仕様書無しさん :01/08/27 23:39 ID:b6uw3B7s
>__builtin_constant_p(sizeof(int)) win厨なので、分からないんだけど、 どうなるの?教えてくさい。
>>554 コンパイル時ではなく、実行時に sizeof(int) を計算するの? それ
はさすがに無いと思うけど。
最適化によって変わるのは、むしろ
const int a = 1;
__builtin_constant_p(a)
とかでしょ。
マジレスなのでsage __builtin_constant_p(expr)は、 gccのbuilt-in functionで、 「exprが定数となりうるかどうか」を判断します。 よって __builtin_constant_p(sizeof(int)) は コンパイラによって必ず1にされます。 const intがどうなるかは実験してないので知らぬ。 もちろん、 __builtin_constant_p(__builtin_constant_p(expr)) は、1になります。 ただし、一般に定数と思われている、 「functionへのポインタ」「配列の先頭」は、 上記では定数と見なされないようです。 …デバッグマクロ以外じゃ使い道ねーな。
__builtin_constant_p(expr)が0を返しても、実際のコードは定数になってる可能性はある。
コンパイラがコンパイル時に定数であることを保証できるかどうか。
つか、
>>552 はネタ。
559 :
仕様書無しさん :01/08/28 23:57 ID:DIrNRouo
#define MAX_ARRY 32 #define A_NUM 0 ・・・ #define A_LAST 32 unsinged char TEXT[MAX_ARRAY]; ・・・ if(TEXT[A_NUM] == A_NUM){} こんなのばっか。書き直したいけど、権限がないので書き直せない。逃げ出したいよ・・・・
? 下手に実数でやられているよりもいいのじゃないかと思うが・・・
どうしてマクロが不満なのか教えてほしいな!
>>559
561 :
仕様書無しさん :01/08/29 00:19 ID:vOB18it6
if(TEXT[0] == '\0'){}
のほうがいいっていいたいんじゃないかな・・・。
>>559 は
A_NUMじゃ、配列の先頭要素とかヌル文字って連想しにくいもんね。
<何とか.java> public class 何とか{ public String なんだか; //... public 何とかData[] data; //メソッドなし! } <何とかData.java> public class 何とかData{ public String なんだか; //... public 何とかDataData[] data; //やっぱりメソッドなし! } //以下延々と… …設計者、ホンマもんのヴァカだ… こんなことするなら、そもそもJava 使うなよ…(まあCでもヴァカだけど)
563 :
仕様書無しさん :01/08/29 01:20 ID:8u2Snirs
>>562 ワラタ
構造体で充分ですな。
設計者ヴァカ過ぎ。
>>563 ちょいとちゃう。Javaには構造体はない。
Javaでは、普通はCompositeでやる。
おいらなら、めんどくさいので一階層でCompositeモドキ。
下の例は最低限の実装イメージ。ホントはもうちょっと必要。
562のソースの1/1000のソース量。
public class Node{
private Map attributes_ = new HashMap();
private List children_ = new ArrayList();
public void setAttribute(String id,Object val){attributes_.put(id,val);}
public Object getAttribute(String id){attributes_.get(id);}
public void addChild(Node node){children_.add(node);}
public Node getChild(int index){(Node)children_.get(index);}
}
565 :
仕様書無しさん :01/08/29 04:31 ID:AJCsTd0Q
おそレスで、誰も相手にしてくれないかも知れんけど・・ そー言えば、結構前だけど、Cのエミュレータ作りに挑戦した時(挫折したが) K&Rの本の一番最後に構文が載ってたな。 sizeofは、単項演算子の部類っぽくなってたよ。 ということは、、、コンパイラによって違うのかもしれないけど、 コンパイル時にsizeofは定数に置き換わるんじゃないかな? 例えば、 int a[] = {0, 1, 2, 3, 4, 5, 6, 7}; int size = sizeof(a) / sizeof(a[0]); みたいなのは通るけど、 void Func(int *a) { int size = sizeof(a) / sizeof(a[0]); なんてのは通らないでしょ? 試してないし、思い付きで書いてるから間違ってるかも
566 :
仕様書無しさん :01/08/29 05:00 ID:zFPSp17Q
sizeof(a[0])はsizeof(int)だべ
567 :
565 :01/08/29 05:23 ID:AJCsTd0Q
>>566 返事ありがと。
そうか、、、それでも後者は駄目だよね?
568 :
sage :01/08/29 07:17 ID:p1uwNlQU
>>567 sizeofに渡した式は実際には評価しない決まりがあるから問題ないよ。
>>566 の言うとおりの答えが出る。
570 :
仕様書無しさん :01/08/29 08:36 ID:mr74JTY6
自信満々の知ったかといい、妙な当て字を得意げに使う自己満足
な文章といい、
>>512 って氷魚クンじゃないの?
571 :
仕様書無しさん :01/08/29 23:37 ID:BkTlbfOc
>565 通るんじゃない? 32bitUNIXだと限定して void Func(int *a) { int size = sizeof(a) / sizeof(a[0]); sizeof(a)->aはポインタ->4 sizeof(a[0])->a[0]はint->4 よって未確定要素無しなので、必ず1が入る。 ポインタが絡むsizeof()で未確定要素ってあり得ないと思うけど、どう?
572 :
565 :01/08/30 00:27 ID:qZbH2h7A
>>571 試したよー。
確かに、おっしゃる通りの結果でした。
でも、
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int size = sizeof(a) / sizeof(a[0]);
と、やった場合、「size」には「9」が入るわけで、
どっかで、その「size」を使って、
for(i=0; i<size; i++)
a[i]使った処理
見たいなことをやっていて、
void Func(int *a)
{
int size = sizeof(a) / sizeof(a[0]);
を誤解していたら、おっかないことになるなーって思って。
(僕も勘違いしていたけど)
例えば、sizeofを関数かマクロだと勘違いしているとして、
実行時に引数の配列のサイズを取得すると思いこんで
コーディングしたら、えらいことになるでしょ?
まぁ、その程度の間違いにはすぐ気付くと思うけど、
「汎用初期化関数作りました−」とか言われたら鬱になっちゃう。
573 :
565 :01/08/30 00:27 ID:qZbH2h7A
うぉ!会社からと、家からでIDが違う!! って、当たり前か…
574 :
仕様書無しさん :01/08/30 00:29 ID:.r40QoWg
#define TYUBO 4
575 :
仕様書無しさん :01/08/30 01:25 ID:mP6ZzKV.
>>572 やっちまったことある。配列でじかに取ってた既存のソースから
ポインタもらうソースにコピペしたらなぜだか最初の1個しか処理しない。
なぜなんだと悩んだよ・・・打つ出し脳。
577 :
仕様書無しさん :01/08/30 01:48 ID:GKa9oNoE
/** 文字列 source 内の指定の文字を別の文字列に置換した結果を result に入れる。 (たとえばプレーンテキストをHTMLに変更するとか */ // String source, result for (int i = 0; i < source.length; i++) { char c = source.charAt(i); String appendValue = ""; if (c == ' ') { appendValue = " "; else if (c == '<') { /* 中略 */ } result += appendValue; source が 100KB くらいあったら、一体いくつのオブジェクトが無駄になるんだろう。 ギガバイトレベルの無駄がある。 -verbose:gc オプションの出力見てると一気に "0% free" になって、ある意味で爽快。
578 :
仕様書無しさん :01/08/30 01:52 ID:GKa9oNoE
>>577 ソース部分修正
for (int i = 0; i < source.length; i++) {
&anp;&anp;char c = source.charAt(i);
&anp;&anp;String appendValue = "";
&anp;&anp;if (c == ' ') {
&anp;&anp;&anp;&anp;appendValue = "&anp;nbsp;";
&anp;&anp;else if (c == '<') {
&anp;&anp;&anp;&anp;/* 中略 */
&anp;&anp;}
}
579 :
仕様書無しさん :01/08/30 01:55 ID:GKa9oNoE
>>578 ぐあー、また間違い。
for (int i = 0; i < source.length; i++) {
char c = source.charAt(i);
String appendValue = "";
if (c == ' ') {
appendValue = " ";
else if (c == '<') {
/* 中略 */
}
}
580 :
sage :01/08/30 02:03 ID:kAN7ztDY
落ち付けって。 仕事でそんなリリースの仕方してたら、逆に周りの人がやめたくなっちゃうぞ。
581 :
仕様書無しさん :01/08/30 02:10 ID:mEzNcTXw
>>577 Stringの文字列長分だけ+=繰り返しは、記述は簡単でも内部処理は
キツイね。
でも1文字のStringって、内部的にはSoftRefferenceかなにかで
Flyweightオブジェクトキャッシュになってんじゃないの?
いちいちインスタンス生成削除はしてないと思うんだけど。
確かどこかでそんなことを書いていた人がいたような…
VMやランタイムのヴァージョンによるんだっけ?
>>149 亀レスですが、fp(stdout)の出力先のfd(1)が無いと
バッファがいっぱいになったときに(処理系依存かもしれないが)
失敗します。
このようなコーディング規約のプロジェクトに参加させられたときは
closeも戻り値を見ました。
583 :
♯6411 :01/08/30 02:39 ID:WaZdXN2I
584 :
仕様書無しさん :01/08/30 02:48 ID:GKa9oNoE
>>581 そうなんだ。
ちょっといま JDK1.3.1 の String のソース見てみたけど
それらしいところを見つけられなかった。
VM で吸収してるのかな。
ちなみに紹介したやつのときは JDK 1.2.2 で Solaris VM です。
>>577 ていうか、素朴な疑問として、
なぜ String.replace や StringBuffer.replace を使わないんだろう?
(または、そのメソッドのソースを見てみようと思わないのか?)
586 :
565 :01/08/30 12:19 ID:N/i8y7JU
>>576 IDちゃんと出てるジャン。
僕は2台も3台もパソコン持ってません。
587 :
565 :01/08/30 12:21 ID:N/i8y7JU
>>576 誤爆しました。
自作自演を指摘されたのかと勘違い。
そんなに愉快?
まぁ、僕は愉快ですけど。
588 :
仕様書無しさん :01/08/30 12:34 ID:gEE0XK6Q
>>585 replaceでは、charをcharに置き換えることしかできないからでは?
charをStringに置き換えたいんだろ。
589 :
仕様書無しさん :01/08/30 12:49 ID:gEE0XK6Q
>>584 つうか、StringがJDKそのままのソースをコンパイルしたもので
あるわけないだろ。アホか。
590 :
仕様書無しさん :01/08/30 21:19 ID:WsPkT2M2
何で String.replace(String old,String new)や StringBuffer.replace(String old,String new)が 存在しないのでしょうか?
591 :
仕様書無しさん :01/08/30 21:37 ID:hqS/Rom6
>>590 それぞれのメソッドの戻り値を何にしたらいいのか考えてみたらどうかな?
592 :
仕様書無しさん :01/08/31 00:47 ID:seI0gCvk
>>579 ちなみに、そのソースがそんなに悪いのかいまいちわからん。
もうちょいスマートな書き方はできるが、自然な書き方だろ。
593 :
仕様書無しさん :01/08/31 02:15 ID:Uw/LOPIM
自称業務歴8年の男が書いたソースです。 case 1: /* 1 */ 処理1 break; case 2: /* 2 */ 処理2 break; case 3: /* 3 */ 処理3 break; default:/* デフォルト */ break; ロジックに問題があると言うよりは(以下略
>>593 関数ポインタの配列をつかえって、言いたいのかな?
よくわからん。
595 :
仕様書無しさん :01/08/31 06:36 ID:wqxqx0pc
596 :
仕様書無しさん :01/08/31 06:53 ID:Tp2awGrs
先輩の書いたコード・・・ ある関数が動作してないってことで、関数見てみた。 void CopyValueOfServer( int x, char* y, char* z ・・・){ }
597 :
596 :01/08/31 06:59 ID:Tp2awGrs
ごめ・・・ しっぱい・・・ 全部の引数の参照先の値を変えないといけないのに int x ってやってた・・・ 本人曰く 「代入してんだから大丈夫でしょ??」 char のポインタ はちゃんとやってたのになんで? しんでくれよ・・・
598 :
仕様書無しさん :01/08/31 09:45 ID:Qc9VFrx2
>>597 char のpointer をstring として理解してんじゃないの?分からんけど。
599 :
仕様書無しさん :01/08/31 11:13 ID:QAHLtr5o
やたらに引き数だらけ void f(int a,int b,int c,int d,int e,int f,int g,int h,int i,int j....) { しかも、この関数の中でa,b,c,d,e,f,g,...は使っておらず必要なパラメータは 全部グローバル変数。なんで、こんなことをしているのか、さっぱわからん。
int n; char filename[13]; for (n = 0; n < 100; n++) { sprintf(filename, "HOGEHOGE.A%02d", n); filename[13] = '\0'; // 念のため ・・・ 念のためにバグ入れといたのか?(鬱
601 :
仕様書無しさん :01/08/31 13:27 ID:ZA8wDVu.
>>600 [13]に入れちゃまずいな。
でも、明らかに要らないゼロクリアをなぜだかやりたがる人って多くない?
_snprintf (Win系の場合)にしとけばいいのに・・・・。
break;文入ってるだけマシかも・・・・
>>601 すまん、俺は1年目に先輩に散々ゼロクリアやれ言われて
仕込まれたので、未だにゼロクリアをついついやっちまうよ
600のようなことはやらんけどな(って過去に同じことやったことあるよ・・・鬱だ)
>>600 その昔自分が作ったものにひじょうによく似てるんだが
606 :
604 :01/08/31 15:02 ID:WN2zsPIw
/* 念のため */ よく使ってたよなあ・・・このコメント
念のため、で思い出したが、 switch (pMsg->wParam) { case xxxx: return TRUE; break; // コンパイラ信頼性 }
608 :
仕様書無しさん :01/08/31 16:42 ID:.DD1/dA2
ソースコードでは無いが、以前の会社で3台のマシンをLANで接続して、とある 制御を行うマシンの開発にかかわっていた。使っていたOSでは、(多少制限は あるものの)BSDソケットが使えた。 で、3台のマシン間で通信する必要があるのだが、その方法というのが... ・HDDをNFSマウントする ・コマンドやデータの送信は、特定ファイルをopen, readして該当個所 の値を書き換える。 ・受信は受信側マシンでそのファイルをポーリングする(open, raed して以前の 値と変化があるかどうか調べる)タスクを走らせる。 ということをやっていた。 なぜTCPなりUDPなりで通信しなかったというと、開発に関わっていた人が(当時 の俺も含めて)誰もソケットの使い方をしらなかったから。 で、俺はスティーブンスの本を読んで、これなら使える と自分のモジュール部分 の通信でソケット使うように設計書を書いたら、上の人に却下された。 理由は「今までそうしてなかったから」。 ちなみにそのOSはタスク(プロセス)空間が独立していないので、グローバル変 数使いまくりだった。にもかかわらずセマフォなりの排他制御をしていないの がかなりあった。 給料は良かったけど、やめて良かったと思っている。
609 :
仕様書無しさん :01/08/31 17:24 ID:uA5E4Mo2
610 :
608 :01/08/31 17:29 ID:.DD1/dA2
>>609 VxWorks 5.1 か 5.2か。
オプションか何かで、タスク空間の保護もできたと思ったけどそれ
はしていなかったのです。
611 :
609 :01/08/31 18:03 ID:uA5E4Mo2
>>610 うっそ。まじー?VxWorks使う資格ないよ、それは。
612 :
608 :01/08/31 18:24 ID:.DD1/dA2
>>609 、611
スマソ、当時は俺も(今より遥かに)厨房で。
でその上の人とは(メールでだけど)かなりやりとりしたのだが、結局
従来通り fopen, fread, fwrite 方式になった。
何せチームが北海道と本州に分かれてたので、いいかげんメールの
やりとりに俺も疲れたんよ。
ちなみに、GBDのリモートデバッグも使わず、皆 printfデバッグだっ
た(w
ちなみに、その会社(グループ)は業界でもシェア世界 1、2位を争う
会社(の子会社)。
東証1部上場で、今日の終値 6千円強。
613 :
仕様書無しさん :01/08/31 18:27 ID:maEh55Qs
>>601 漏れもゼロクリアしたがる一人かも。
使うメモリーはゼロクリアないしは値をセットしてから使うよ。
>>600 のfilenameならmemsetでNULLでクリアしてから使う。
無駄なのだろうな。
614 :
仕様書無しさん :01/08/31 19:03 ID:M8H0Ygxw
>>613 でも設計書の段階から、初期化の処理で 0 クリアを義務付けている
ものって割とないか?
615 :
ミ(゚◎゚)ミ ◆c2uMaIpA :01/08/31 21:42 ID:NXBBGYUA
メモリをゼロクリアしておくと、デバッグ中メモリダンプしたときに 見やすいと言うね。 オレはやらないけど。
とある制御系プログラムを書いてます。 引継ぎしたソース、1つ構造体の中にさらに5つ・・・そこからまた3つ・・そこからまた8つ・・・と、まぁこれは そんなに珍しいものでもないとして。 変数の80%が無意味。 値は入っているが代入のみで参照一切なし。 そこで、これらの変数を削除していいかと聞くと「ダメだ。いつか使うかもしれない」 では使う時までマスクしておいていいかと聞くと「ダメだ。間違って消してしまうと困る」 それで、速度重視の仕様を追加変更しろっちゅーんかい!! と、これも説明したが 「そんなに影響の出るものでもないだろう」 ・・・毎サイクル無意味な変数60個以上 値の代入してたら・・・影響出るだろ。おい。
>>616 既存のソースはなるべくいじらず更新せず。
…らしいよ
618 :
仕様書無しさん :01/08/31 23:16 ID:9x6zh8wc
グローバル変数は構造体一個しかないんだけど、 それに全ての情報がぶちこまれている。 サイズは1万を超える。
619 :
仕様書無しさん :01/08/31 23:30 ID:Hnz3MMbE
ばいと?行?
620 :
とねぞう :01/09/01 01:07 ID:i5nJRCXw
for(;i<rec_count;i++){ if (・・・){ goto ERR1 ・ ・ ・ ERR1: return 1; } ・・・あら?
621 :
仕様書無しさん :01/09/01 01:37 ID:3dLLB/YQ
C言語何ですけれど、 ifを使って で省いているソースが 500行程続いていた時はホント驚きましたよ。 同じような処理がたくさん書かれているから保守するのも大変 全くオブジェクト指向とはほど遠い作りになっております。 でも、ココで諦めちゃダメですよね。 自分が少しづつでもいいからから体制を変えていく気持ちでがんばりたいです。
622 :
仕様書無しさん :01/09/01 01:40 ID:wXllhF8k
<Hage.java> public class Hage{ public void func() throws AException,BException,CException{/* Some Impl */} } 別クラスのある関数 public void hoge(int[] return){ try{ Hage hage = new Hage(); hage.func(); ret[0]=0; } catch(AException e){ret[0]=1;} catch(BException e){ret[0]=2;} catch(CException e){ret[0]=3;} } なに考えてんだ… JavaできないんだったらJava使うなよ…
623 :
仕様書無しさん :01/09/01 01:41 ID:wXllhF8k
public void hoge(int[] return){ ->public void hoge(int[] ret){ ミスった。
624 :
仕様書無しさん :01/09/01 01:44 ID:3dLLB/YQ
C言語何ですけれど、 #if 0 #endif で省いているソースが 500行程続いていた時はホント驚きましたよ。 同じような処理がたくさん書かれているから保守するのも大変 全くオブジェクト指向とはほど遠い作りになっております。 でも、ココで諦めちゃダメですよね。 自分が少しづつでもいいからから体制を変えていく気持ちでがんばりたいです。
625 :
622 :01/09/01 01:48 ID:wXllhF8k
ちょっと足りないな。 さらに別の関数 public void hage(){ int ret = new int[1]; hoge(ret); switch(ret[0]){ /*条件分岐*/ } }
>>624 #if 0 自体は仕様変更で機能削除する時に、
万が一やっぱり必要だと言われた時に
劇鬱にならない様にするために使われる手段ではあります。
627 :
仕様書無しさん :01/09/01 02:05 ID:jXCmjtPk
628 :
仕様書無しさん :01/09/01 02:17 ID:actEF9UM
629 :
仕様書無しさん :01/09/01 02:20 ID:actEF9UM
>>627 cvs?いらん。あんなもの。
つかえねぇよ。つかえん。つかいづらい。いらん。
#if 0で切ればいいんじゃないの?
>>626 に同意。
630 :
sage :01/09/01 02:25 ID:fONJnvsY
↑ 俺だったらこいつのいる会社やめる。
Cでも昔のソースならオブジェクト指向とは関係ないだろ
>>624 もしかしてWin95か98辺りでパソコンってものを知った?
633 :
仕様書無しさん :01/09/01 02:51 ID:WX7.0bGo
>>628 激しく、同意はするが・・・・
エライ、昔の話だね。(藁
>>630 使えないのは CVS じゃなくて、お前の方。
#if 0が標準なのはキツイが、CVSがそんなにいいか? それにCVSでやろうとしている事と#if 0でやろうとしている事とは 違うと思うぞ。
637 :
仕様書無しさん :01/09/01 05:08 ID:jXCmjtPk
>>636 どう違うか説明しろよ。
無駄なコードをソースの中に残すな。ただでさえ汚いお前らの
ソースが余計に汚くなるだろ。修正する奴のみにもなれ。
638 :
仕様書無しさん :01/09/01 10:09 ID:SxMpO4QE
void hoge(int a, Connection con) throws SQLException { String sql = "select to_date(to_char(date"+a+", 'yyyymmdd')) from hogehoge"; PreparedStatement ps = con.prepareStatement(sql); ResultSet rs = ps.executeQuery(); 以下略 萎えた…
639 :
sage :01/09/01 10:10 ID:fONJnvsY
(゜д゜)<使えないっていわりた いやべつにCVSとかそれっぽいやつ使わなくてもいいけどね。 #if 0 で殺した部分をナニカの機会で戻すときに、 それまで同じ場所に当てた修正も当て直してくれるのならいいよ。 ああもちろん、CVS使えない人がいて、他人の修正履歴無視して チェックインしちゃった事件のある職場なら同情するけど やっぱ、俺なら、他の職場を探すよ。うん。
640 :
仕様書無しさん :01/09/01 10:11 ID:SxMpO4QE
2行目 String sql = "select to_date(to_char(date+"+a+", 'yyyymmdd')) from hogehoge"; だ…
641 :
仕様書無しさん :01/09/01 11:42 ID:7RYoc1HE
/* ここにコメントを挿入すると動くようになった。*/ (゚Д゚)ハァ?
642 :
仕様書無しさん :01/09/01 11:43 ID:7RYoc1HE
>>630 ( ´_ゝ`)フ−ン、相手を辞めさせるんじゃないの
643 :
仕様書無しさん :01/09/01 12:03 ID:3MrKXbAo
if(strcmp(ValueStr, "0") == 0 || strcmp(ValueStr, "00") == 0 || strcmp(ValueStr, "000") == 0 || strcmp(ValueStr, "0000") == 0 || strcmp(ValueStr, "00000") == 0 || strcmp(ValueStr, "000000") == 0){ //..... //..... } おいおい…
644 :
仕様書無しさん :01/09/01 12:13 ID:npSIjMSg
>>641 コンパイラが不出来だとそういうことがあるのだよ・・・まじで
645 :
仕様書無しさん :01/09/01 12:45 ID:mg/gFSQA
引数の数が150。
>>644 そうだな、昔はよくあった。
/* が閉じられてません、って/*なんて1つも使ってねえよ!
しかたがない、コメント1行追加するか。
/* コメントがないのにコメント閉じてないとエラーになるので追加 */
complete.
error 0.
・・おい。
647 :
とねぞう :01/09/01 14:57 ID:/IPGzelo
648 :
仕様書無しさん :01/09/01 16:22 ID:CvjHwrr2
>>641 学生時代、プログラミング演習で使っていたPascalコンパイラは日本語を
含んでいると、たまに原因不明のエラーが発生するので困っていたよ。
結局コンパイル専用のコメントなしソースを別に作っていた。(鬱)
649 :
仕様書無しさん :01/09/01 16:58 ID:GO0rhp5E
>>648 そういう時は、コメント削除のプリコンパイラもどきを、SEDか何かで
作っておくべきかと思われるが…
C++ で「メモリリークしてっから潰してね」と言って返ってきたソース。 CFoo *foo; foo = new CFoo; ... ...(なんかの処理)... ... foo = NULL; //←これが追加されてた 「辞めよう」じゃなくて「辞めさせよう」と思った。
651 :
仕様書無しさん :01/09/01 18:25 ID:pq40gGQQ
いま仕事途中で放り出して逃げた奴のソース追っかけてます。 オイラも逃げようかなぁ〜と思案中です。 あんなクソコードそうにもできない。
仕事途中で放り出して逃げたことありましたけど何か? 最後の仕事はギンギンのオブジェクト指向で作ってあって 割りこみやオブジェクト間の擬似メッセージで動作する システムだったけど、オブジェクト単位で考えると すっきりするけど、流れを追おうとするとお手上げだろうなー。
653 :
仕様書無しさん :01/09/02 00:30 ID:EZelmJpc
うちの先輩はカプセル化されていないクラスを平気で書くなぁ。 何かに依存する場合はきちんとコンストラクタの引数や、 virtual で差しかえられるようにして欲しいなぁ。
654 :
仕様書無しさん :01/09/02 02:08 ID:PfQflN.o
>>643 激しくワラタ。
最大文字列長さまで続くのかな?
別会社の奴が作ったモノの修正だった上にソースじゃないけど、 テキスト項目を1つ作ってプロパティで複数表示にしてやりゃ いいものを10項目×30行全部別々のオブジェクトだったとき…
656 :
仕様書無しさん :01/09/02 05:04 ID:uTCvb1wY
ソースコードでもないし、俺の会社と取引があるわけでもないが・・・・ 就職先探してるときに、こんな感じの求人広告を見たYO! (株)Hoge 10数年前に当時不可能だといわれた処理を社長が作成に成功した。 (以下、自慢が続く) そのシステムのソースは未だに社長しかさわれないというほど複雑な処理です。 あなたも、当社で働いてみませんか? 詳細は忘れたが、社長しか触れないソースを、自慢してたような感じだったな(藁 誰がそんなデスマーチに自らはまりに行くんじゃ、ヴォケ! と思い、候補から真っ先にはずしました(藁
657 :
C :01/09/02 06:05 ID:/7nGuvsM
>656(...その文章、生で読みたいW
>>650 それは、明示的にガーベージコレクタを呼び出したんだよ。
659 :
仕様書無しさん :01/09/02 06:57 ID:4Opp/P/k
どう見てもファイルが少なすぎる。 コンパイルするとエラーになる。 どうやって動かしてたのか分からん。
>>656 オレの最初の会社(もう存在しない)は、ある時何を思ったか
(株)uhyo
以下が当社の失敗の実績です。
・19XX年、〜〜社とのトラブルにより〜〜〜百万円の被害、
1x人が退社
・19XX年、〜〜の開発中に問題が発生、〜〜と〜〜と関連会社の
〜〜〜に〜〜〜百万円の被害を与える。x人が退職
・19XX年、組合との談合中にトラブル発生、解決しきれず1x人が退社
・
・
このような失敗を何度も繰り返しつつも、確実に仕事を得て実績を伸ばしていっている
根強い基盤を持つ会社です。社長自ら営業に動き、大手メーカーとの強いコネクションにて
会社経営を維持しています。あなたもこんな会社で働いてみませんか?
社員であった俺は、「終わったな」と思い、1年後に辞めた。
そしたら辞めて半年で潰れた(w
661 :
仕様書無しさん :01/09/02 14:53 ID:yc0IoDhM
662 :
仕様書無しさん :01/09/02 15:04 ID:8X..TUFE
>>661 いや、精神修養だろ。
「修行するぞ!」…ふっるー。
>>661 もし引数が
void aho(int a1, char a2, int *a3, .... USER_STRUCT *a150 );
だったりしたら完全ないじめだな
ウチ、今C開発なんですけど、 ポインタの使用に申請が必要なんです。 所要期間1ヶ月。 コーディング期間2日。。。 サヨナラ・・・(笑)
665 :
仕様書無しさん :01/09/03 01:34 ID:8Yz2Oc.U
>>664 Cでポインタ使わないって、文字列とかはどうしてんの?
>>664 何でこの板は、こんなネタみたいな話ばっかりなのでしょう…
この業界は、他の業界じゃ信じられないような低レベルな、
適正ない奴バッカリということなのかな?
667 :
仕様書無しさん :01/09/03 01:42 ID:2KBg5gac
とうぜん配列。。。。わけわからん。
669 :
kote :01/09/03 02:01 ID:tdvhHcqo
if else の間が8000行 else は1行
671 :
仕様書無しさん :01/09/03 05:56 ID:xqIUHD66
とりあえずCのif〜else文等で{}を省略すんのやめろ。 一行しかなくても{}で括れや。
>>671 どうでもいいけど一応同意
あったほうが見やすいよね。
でも、それだけで辞めようとは思わないなあ(www
for( i = 0; i < hoge; i++ ) { if( b > 0 || b < 10 ) continue; else if( b < 0 ) continue; else if( b > 30 ) continue; else if( b == 0 ) continue; else break; /* なんかの処理 */ }
674 :
2 :01/09/03 10:38 ID:PgBKzc4E
c = get_hoehoe(); for( i = 0; i < x; i++ ) { if( c != 0 ) { for( k = 0; k < xx;; k++ ) { if( c != 0 ) /* なんかの処理 */ } } } xは最高で60000。最低でも2000。
間違えた。こんな感じだった。 c = get_hoehoe(); x = get_ugyaaa(); for( i = 0; i < x; i++ ) { if( c != 0 ) { for( k = 0; k < ((x % 10)+1);; k++ ) { if( c != 0 ) /* なんかの処理 */ } } } xは最高で60000。最低でも2000。
676 :
sage :01/09/03 11:29 ID:aD2f0JbU
>>675 なんかの処理でcやcのエリアスを更新していないなら、
頭のいいコンパイラはチェックを一回にまとめてくれるよ。
>>665 >Cでポインタ使わないって、文字列とかはどうしてんの?
トーゼン、配列。
トーゼン、全てグローバル変数。。。
話変わりますが、、、
struct sss{
i_aaa[10];
i_bbb[8];
i_ccc[12];
o_aaa[10];
o_bbb[8];
o_ccc[12];
} zzz;
I/O処理に使う変数だと思って作った本人に聞いたら、
画面を縦にニ分割し、左画面出力用と右画面出力用の変数だと聞いたとき、
こいつとはもう仕事したくないと思った。
他にもdummy1,dummy2,dummy3とかよく使っているみたいだし。
参考にしろといったって、かえって訳わからんなるわ〜!
678 :
仕様書無しさん :01/09/03 14:41 ID:tdvhHcqo
int mayumi = 0; 以前その課にいた新人の女の子で、かわいかったからそのまま作らせたと・・・ 当然辞めた。
679 :
仕様書無しさん :01/09/03 15:40 ID:ibY9Davc
「無駄なコードがあったのでかなり削りました。 相当速くなったと思います。」 とか言ってコメントを全部削除したアホがいたなぁ・・・。
680 :
旅人プログラマ :01/09/03 19:09 ID:fvcc3/22
>>666 いやいや、本当にいろんな会社があるんですよ(苦笑
WinAPI使用禁止とか、
変数名の長さは14文字固定長で、連番付けされているとか、
仕様においては…(以下自粛)
やられた事に付いては…(以下自粛)
聞いてくる質問においては…(以下自粛)
>>679 コメント削除じゃなくて、#if〜#endifによる履歴削除したやつはいた。
また、「メモリを無駄に使っていたので負荷を軽くしましたよ」と、
long宣言を全部intに変えたやつも。16ビット端末で何やらかすんじゃ!
テストが終わったら「テストは無事完了しましたのでテストシートを廃棄してきました」と
言ったアホもいたなあ。。納品資料だったのに捨てやがったので、800枚ほど再度印刷して
徹夜で1枚1枚○と日付入力をするハメになった記憶が・・・ああ鬱だ。鬱だぁーーーっ!!
682 :
仕様書無しさん :01/09/03 23:29 ID:.NTt.rjw
あのぅ、ポインタ禁止だとかポインタ使うのに申請が必要っていうネタが今まで何回かあったけどさ。 肝心のmain()はどーすんの? argv[]はポインタの配列でしょ?使えなくてどーすんのさ……
683 :
sage :01/09/03 23:39 ID:aD2f0JbU
>>682 void main(void) に統一? w
>>682 ポインタ禁止とかぬかす脳足りんには、argv[] は配列に見えるんでしょ。
685 :
仕様書無しさん :01/09/03 23:59 ID:inA2p8j6
つーか[]演算子によるアクセスはポインタアクセスに見えて ないんでしょ。 範囲チェックなんかぜんぜんされなくて言語仕様上も*を つかったポインタアクセスとまったく変わりないというのに。
686 :
仕様書無しさん :01/09/04 00:11 ID:4T6qob.c
Connectionオブジェクトがclose()されてない個所があるようなので 探してください、といわれて20000行くらいのコードを見た。 Connectionオブジェクトがclose()されていなくない個所がひとつも無かった。
>>686 Connectionはプールしないの?
おいらは、初期化で一定数Connectionつくって、以降はずっと
使いまわすぞ。シャットダウン以外は一回もclose()よばない。
この引数、なんか全然使われてないんですけど何ですか? と聞いたら よく見ろよ! 関数呼んでるここの部分で値セットしているやろ! と言われた。 ふむふむ、本当だ。値セットされてる。でも、毎回=1としか書かれてないですよ? と聞いたら それでも引数で与えているということは意味があるんじゃ! と言われた。 でも、この変数ってグローバル変数ですよね。なんで引数にするんです? と聞いたら そういう仕様じゃ! と言われた。 はあ。で、それで引数として与えて、一切参照してないんですけど何故ですか? と再度聞いたら ・・・おおっほんまや、お前結構目ぇ鋭いなあ! と誉められた。 このシステム、こんな状態ばかりで4年も動いてたのか・・・と思うと辞めたくなったよ。 他にも毎回0しか返さない関数、グローバル変数を引数で与えまくっている関数呼び出し部分・・・ここ本当に大手電器メーカー?
689 :
仕様書無しさん :01/09/04 12:42 ID:EPr2Usf6
>>632 「 Cでも昔のソースなら 」
このセリフが物語っている。
向上心のない、受身の人生。
>>689 「OOが無かった頃の」という意味と思われ。
691 :
仕様名無しさん :01/09/04 13:19 ID:B/PivQEA
>>682 >>683 使えないミドルウェア使用するため、
argv[]は使用しないんですぅ。
ちなみにサーバー、立ち下げに3時間、立ち上げに3時間かかります。
たち下げ失敗するとさらに倍!
F更した日は1日立ち上げに失敗してる。
692 :
:01/09/04 13:29 ID:TCXlmXyA
signalの処理のなかでprintf系の関数つかってる。 しかもそのsignalでは、プロセスは終了しない。 辞めようとは思わなかったが、その部分は、知らんぷりしといた
693 :
仕様書無しさん :01/09/04 23:08 ID:IAf.u5ug
シグナルの処理ってことは、Unix系OSだろ? printf系の関数って標準入出力のことか? それのどこが悪いんだ? DOSの割り込み中に端末に文字を出そう する話なら分かるけど。
Aさんほかの会社の人も見るソースに 修正履歴 YY.MM.DD 会社名_ペンネーム は止めてください
シグナルハンドラの中で使える関数には言語仕様で 制限されていたと思うのですが気のせいでしょうか
>>693 シグナルハンドラから安全に呼べるシステムコール/関数は、きわめて
制限されてます。たいていの環境で、write(), や malloc() 使ってた
らアウトじゃないかな。
Solaris が手元にあるなら intro (3) に詳しく書いてあるはず。ここ
で async safe (async signal safe だったかも) と書いてあるもの
以外は、シグナルハンドラから呼び出してはいけない。
697 :
回収されるだけのことはある。 :01/09/04 23:46 ID:Dypw/NbE
mo〜いや。 関数にわけろよ・・・。 switch(co){ case 1: switch(do){ if(){ switch(){ } } } break: case 2: if(){ switch(){ } } } こんなのが延々と続く・・・。
698 :
仕様書無しさん :01/09/05 00:14 ID:CWosPXu6
ヴァカにはswitch文使われるだけでイヤになるね……
699 :
仕様書無しさん :01/09/05 00:48 ID:6wTgQGc6
700 :
仕様書無しさん :01/09/05 00:53 ID:cn7Ak9JE
main(){ /*アトハヨロシクネ(・∀・)*/ }
702 :
仕様書無しさん :01/09/05 02:41 ID:aWM7tz2w
>>632 オブジェクト指向の意味分かってんの?
「オブジェクト指向への招待」
でも読んで勉強したら
.
>>702 > オブジェクト指向の意味分かってんの?
なんて書くやつは学生orDQNだけだよな・・・
704 :
632 :01/09/05 07:31 ID:UKGCNHv2
どうにも典型的なマニュアル指向厨房が多いなあ、ここ
>>688 別におかしくないと思われ。
グローバル変数を直接あちこちの関数で変更・参照されるよりも、
パラメータで渡しておけば後で修正・使いまわししやすいし。
>>696 Stevens の本にはシグナルハンドラから呼び出せる再入可能関数
(システムコール含む)に read/write が上がっているよ。
安全じゃないのは再入可能でない関数に再入してしまう可能性が
あるからで、再入しないことがプログラムの構造上保証されてるなら
呼び出したって構わないはず。内部でリエントラントでない malloc
使ってる奴はぶつかる可能性が高いけどね。
安全じゃないから一律に呼び出し不可というのはちょっと
偏狭なものの見方ではないかと思うがどうよ?
707 :
仕様書無しさん :01/09/05 12:43 ID:6SEfoVx2
<<703 やっぱり分かんないんだ
オブジェクト指向とか騒がれ始めたのって、ここ6〜7年ぐらいじゃないの? 10年前のCのソースとかにそういうのが無くても全然おかしくないと思うけどね。 流行りはじめてから飛びついた人に限って、知ってる知らない論争頑張るっていうけど・・
709 :
仕様書無しさん :01/09/06 12:16 ID:m.JVszaM
>>708 昔のソースそのままの状態でいいって言う考え方が
腐ってんだよ!
711 :
仕様書無しさん :01/09/06 12:32 ID:m.JVszaM
受身はこれだからいやだ
>>632 ってそんなに変か?
構造化できてないっていうんならわかるが、Cのプログラムがオブジェク
ト指向から程遠いのは昔のCだけでなく今でも当然だ。
つーか、過去にかかれたソースでもアプリケーションが まともに動いて実用に耐え得るんなら、わざわざ書き直さないでもいいだろっての。 改修の必要があるなら、オブジェクト指向でもなんでも取りいれて書き直してくれよ。
>>710 >は「関係ない」→「昔のCではOOはあり得ない」って言ってるんだよ。
関係ない=有り得ない?? それ日本語?
715 :
仕様書無しさん :01/09/06 19:45 ID:m.JVszaM
>>713 「まともに動いて実用に耐え得るんなら」
受身だね
>>715 でしたら、この場合において
書き換える必要性のない物に対して工数を追加する理由
は何?
>>716 「まともに動いていて実用に耐え得る」にもかかわらず工数を追加して書き換える理由は?
と聞くべきでは?
マジメに議論したいんなら、意見が対立しているおそれがあるのに、「書き換える必要性の
ない」と一方的に判断しては混乱の元だと思うよ。
煽りあいしたいんだったら、ドーデモ(・∀・)イイ!
>>715 受身だと何か問題が? 「まともに動いて実用に耐えうる」プログラム
が存在するときに、わざわざそれをOOで設計・実装しなおす必要性を
説明してほしいな。
納得の良く理由がないと、予算つけられないし。
719 :
仕様書無しさん :01/09/06 20:26
>>717 ぁぅぁぅ、冷静に言われればそのとうりで氏…スマソ
721 :
仕様書無しさん :01/09/06 20:56
static char buff[32] ; memset( buff, 0, 80 ) ; でも、ちゃんと動いている。
「ちゃんと」ではないだろ(w
723 :
仕様書無しさん :01/09/06 22:08
s/ちゃんと/たまたま/ 定義と、初期化が近くにあるうちはすぐに気がつくからいいけど これが離れるとトラブルを起こしやすい。 定義と初期化は一画面以上離さないようにしよう。
>>722 -723
このスレッドは「この会社辞めようと思ったソースコード」だという
ことをお忘れなく。
>>724 はあ? 忘れてないよ。ちゃんとレスってるだろ。
最近2chに来て威張りたい君なのかもしれないけど、そういうのは
全然関係ない話題を振ったり書き込んだりしたときに言うものだよ。
自分が理解できない会話のときに書くんじゃないんだよ。
ネタスレでマジレスするなって。まぁ
>>718 書いてる俺も、人のことは言えんが。
727 :
仕様書無しさん :01/09/07 12:43
>>718 設計・実装しなおす必要性
↓
メンテナンスにかかる時間を最小限にする事を考慮して、
コーディングしなければならいからです。
「 自分だけが理解していれば良い 」という方法だと、
引継ぎの時にエライ稼動がかかってしまいます。
この稼動にかかる時間は、仕事に費やすべき時間
の本質では無いと私は思うのです。
いかに保守しやすい状態にするかが重要だと私は感じます。
728 :
仕様書無しさん :01/09/07 13:30
>>727 >「 自分だけが理解していれば良い 」という方法だと、
>引継ぎの時にエライ稼動がかかってしまいます。
>いかに保守しやすい状態にするかが重要だと私は感じます。
全くその通りだと思います。
その「もう俺でもメンテできね〜」ソースの修正を
やらされようとしています。
引継ぎたくな〜い。
>>727 >「 自分だけが理解していれば良い 」という方法だと、
>引継ぎの時にエライ稼動がかかってしまいます。
現在のプロジェクトはそういう人だらけによって始まったもので
引継ぎ作業をする前に「自分だけが」の人がみんないなくなったので
全員死にそうになっています
上から読んでて思ったことは・・・ はやいとこリファクタリングが浸透して欲しいよね・・・ 動きゃいいと思ってるヤツ多すぎ。
使ってない#ifdefとか 修正履歴を残すためのコメント を削るだけてもかなり読みやすくなることがある。
削除せずに、そういう部分を透明あぼ〜んできるエディタって無い?
>>732 透明あぼーんされてるブロックに
いろいろ落書きされたら鬱だ
734 :
仕様書無しさん :01/09/07 17:43
>>732 Vim6 の folding とかは?
>>732 #if 0〜#endifを非表示にするエディタならどっかで見かけたような…
736 :
ミ(゚◎゚)ミ ◆c2uMaIpA :01/09/07 19:17
>>734 ,735
vimは使ったこと無いっす、どんな感じですか?
希望の仕様は、#if 0 と#endifの間や、指定の任意の領域を折りたたんで「ココに
透明化されてる領域があるよ」ということを示す色付きのマーク行( ------とか)
1行に置き換えて表示し、指示によって自由に開くことができて、保存時も通常テキストと
修飾情報ファイルに分けて保存して再編集時も前の状態を記憶してるようなやつです。
>> 727 すでにOO以外の設計手法で設計・実装されて動いているものがある場合の話を してるんだが。 > 「 自分だけが理解していれば良い 」という方法だと、 俺も含めて、誰もそんなことは書いてないと思うぞ。
>>721 で
memset( buff, 0, 32 ) ; // memset( buff, 0, sizeof(buff) ) ; のほうが理想
となおすと落ちる…。ハァ?。
>>738 static char buff[32];の後ろ48バイトが
0クリアされて「いない」事が原因だったりしてね。
他のstatic変数で0クリアしていないやばい変数(ポインタとか)
なんかが、同じプログラム内にあるんじゃない?
そのmemsetのおかげでバグが発覚してないの。たまたま。
memsetで落ちるのか、それ以降で落ちるのかで変わりそうだな そんなアホなプログラムだったら、文字列以外のものをstrcpyで 与えたりしてそうだし。
741 :
仕様書無しさん :01/09/08 02:43
>>737 すでにOO以外の設計手法で設計・実装されて動いているものがある場合の話をしてるんだが。
↓
最初の文章でその条件を書けよ。あなたの文章はいつも説明が足りない。
742 :
仕様書無しさん :01/09/08 02:54
>>737 OO以外の設計手法って具体的にどういう方法なんですか?
僕も読んでいて思うんですけれど、分かりにくい文章ですよね。
説明というものは、具体的で明確でないと相手に伝わらないと思います。
>>741 > 「まともに動いて実用に耐えうる」プログラムが存在するときに、
これで意を汲み取って欲しかったけど、確かに門外漢に対する説明とし
ては言葉が足りなかったかもしれません。
まともに動くというのは、少なくとも用意した単体テスト・結合テスト
は全てパスして(請負の仕事なら)検収も済んでいるということで、仕
様書/設計書がない=設計がされていないものは論外です。
OO以外で一昔前まで主流だった設計方法に関しては、「構造化」をキー
に検索すれば見つかりますよ。
>>744 バカはどんなに説明してやっても理解出来ないし、
理解しようともしないから気にすんな。
746 :
仕様書無しさん :01/09/08 17:44
747 :
仕様書無しさん :01/09/08 18:00
i) #undef NULL ii) $ grep pthread_create *.cpp | wc -l 56 $ grep mutex *.cpp | wc -l 0
748 :
仕様書無しさん :01/09/08 20:02
749 :
仕様書無しさん :01/09/08 21:07
>>747 オモロスギ
ツウカ
ウゴイテンノカソレ
ポシャータYO
>>745 もう少し理解力のある人間であることを期待したんだが
>>749 -750
を見るに、相手を買いかぶりすぎてたね(w
騙り防止でトリップ入れとくね。
意味がわからん・・・基地外か?
被害妄想でしょう。 自意識過剰厨房。
754 :
/名無しさん[1-30].jpg :01/09/08 21:28
751は作った奴だと思われめ
単に誤爆なんじゃないの?
誤爆にしては番号が合いすぎだと思うが
まーいいや
俺は
>>1 に対して体験談を書いてみただけだから、なんだかわからんが
あんま怒んなや
>>751
>>747 semaphoreは?
semget, sem_wait, sem_init, semctl
何でも同期、排他が取れるんならいいよ、がっこで習わない?
760 :
仕様書無しさん :01/09/10 15:08
面白い人だ
761 :
仕様書無しさん :01/09/10 15:30
お前がガッコで習ったこと全部書いてみれば?(藁
>>758
>>759 「最低限の努力を惜しむ人にアドバイスするのも気が引けるのですが....」
といいながら こういう爆笑回答をしてしまう人ってすてき!
764 :
仕様書無しさん :01/09/10 21:26
$find / -name '*.c' | xargs grep const /dev/null $
すまん。/ は誇張しすぎだった。鬱氏。
766 :
仕様書無しさん :01/09/10 21:31
>>759 これってMFCのMLなんだよねぇ・・・・。
笑えないよね。。。。。
767 :
仕様書無しさん :01/09/10 22:15
>>764 Cプログラマがconstを使用しないのは周知の事実(涙)。
>>767 いや、Cに const があることさえ忘れていたよ(w
Cは、熟練者ほど型の概念が崩壊してVBのようなコードになるから鬱だ。。
つーかマジスカ・・
>>768 Cプログラマが、マンコありゃなんでもいいよ というか ガキできたら責任
とるからさぁ というか コンパイルできりゃ俺があとはケツもつから好きに
させてくれや というヤケバチな気分になるのもわからんではないが、貴殿ら
(Cグラマ)の書いたコードを利用せざるを得ない身分のC++,JNIグラマというか
俺の身にもなってくれー。
>>769 っていうか、define があるわけだから、
const を使う理由が見当たらない…(マジレス)
型の概念が崩壊しているってどういう状況を示しているのでしょうか?
まさか、データ格納用ライブラリでvoidのポインタを使ってるとか
その類ではないよね?
771 :
仕様書無しさん :01/09/10 23:01
>>770 引数の const でないの?
変更しないであろう引数が const 付いてない時で
たま〜に問題感じることあるけど。
772 :
仕様書無しさん :01/09/10 23:42
真のCプログラマーは言語仕様などに頼りません。 定数として定義したモノを壊すことがあれば それは自分の責任なのです。 レブリミッター付きのクルマには乗りたくないのと同じです! …とか言ってみたりして… ホントは面倒くさいだけだよ。 元々、Cには const も void も無かったんだから。 アセンブラ++ である C に、そう多くは望まない。
Javaのコレクションクラスはvoidのポインタを格納するのが流儀
>>763 この藤田さんは、この程度のことに最大限の努力で挑んだんですね(w
775 :
仕様書無しさん :01/09/11 02:56
>>772 確かvoidって初期のころからあったんじゃなかったっけ?
単にアンドキュメンテッドだったってだけで。
777 :
仕様書書かないさん :01/09/11 04:25
>>771 Cは値渡しだから、ポインタでなければ変更されないでしょ?
・・・あ、変更しないポインタか。
>古回転 ナイス当て字! このネタどっかで使わせてもらおう
#defineがあるからconst使わないんじゃなくて const知らないだけでしょ。
783 :
仕様書無しさん :01/09/11 21:29
const の使い方がわからない奴<逝ってよし!
784 :
仕様書無しさん :01/09/12 11:30
ちょっと古くてゴメン。
>>624 Visual Studio で Ctrl + k、Ctrl + j 使っとけ。
const覚えたての頃は調子に乗って使ってたけど、自分の関数では問題ないけど そっからAPIや標準関数呼ぶときに引数がconst宣言されてなかったりすると よくエラーや警告が出るんだよね?あれがうっとうしい。
786 :
仕様書無しさん :01/09/12 13:17
言語仕様理解しないやつ <逝ってよし! 環境依存コード->引継いだ奴 <- (泣) 逝ってしまいたい、、
787 :
仕様書無しさん :01/09/12 13:26
次の一見間違っている計算式は、ある一定の規則に従い 成り立っていると言える。その規則とは何か答えなさい。 1−4=9 注意:その規則によって常に上の式が成り立たなくても構わない。 要するに、適当に“へ理屈”こねて来いって事。
789 :
仕様書無しさん :01/09/12 14:07
午前1時マイナス4時間=午後9時 ちゃんちゃん。。。
1-2=1.2 1-3=3.6 1-4=9.0 1-5=6.8 ...
>次の一見間違っている計算式は、ある一定の規則に従い >成り立っていると言える。その規則とは何か答えなさい。 >1−4=9 >注意:その規則によって常に上の式が成り立たなくても構わない。 >要するに、適当に“へ理屈”こねて来いって事。 俺が法律。
792 :
仕様書無しさん :01/09/12 15:09
One for Nine Nine for One ラグビーって9人だっけ?
one for all all for oneだお。
794 :
仕様書無しさん :01/09/12 15:26
次の一見間違っている計算式は、ある一定の規則に従い 成り立っていると言える。その規則とは何か答えなさい。 1−4=9 注意:その規則によって常に上の式が成り立たなくても構わない。 要するに、適当に“へ理屈”こねて来いって事。
795 :
仕様書無しさん :01/09/12 15:28
次の一見間違っている計算式は、ある一定の規則に従い 成り立っていると言える。その規則とは何か答えなさい。 1−4=9 注意:その規則匂って常に上の式が成り立たなくても構わない。 要するに、適当に“へ理屈”こいて来いって事。
796 :
( _。。) _ バタ。 :01/09/12 15:28
BYTE *p; *p++=0x63; こんな感じなプログラム。 メモリポインタの記憶容量決めずにイキナリ書くなよ。
797 :
仕様書無しさん :01/09/12 15:29
じゃ、調子にのってもう1問。 1 3 5 7 □ 10 □ 上の数列(?)はある規則によって並んでいます。 □の中に当てはまる数字を答えなさい。 また、その規則も答えなさい。
798 :
( _。。) _ バタ。 :01/09/12 15:30
それと、某無料公開DXライブラリ…… 初心者用だし…私もお世話になったし…内容もおそらく最大の充実だと思うが…… CLASS構造体の中、全部publicなのはどーかと思うぞ……。
799 :
仕様書無しさん :01/09/12 21:16
某都銀の某システムの共通関数はCで書かれてるんだけど、引数が全て char * だ。 そんで、中身はたとえばこんな感じ。 #define ONE 1 #define TWO 2 ... f(char *type) { switch (atoi(type)) { case ONE: ... break; case TWO: ... break; ... } ... } 富士通って、バカの集団ですか?
>>799 COBOLを無理矢理Cに移植した後遺症って所ですか…
>>797 8,12
規則:有休を使いたい月
>>797 31日まである月ということで
8,12
>>785 例えば標準C++のstringオブジェクトからは const char* しか取り出せないからねぇ(str.c_str())。
警告が鬱陶しいとかいう問題でなく、呼ぶCの関数がしっかり引数にconst宣言しているのとを願い、
もしそうなってなければconst_castするしか道がない(自分で保証しながら書いてきたココードの堅さ
が一気に崩れ去る瞬間)。
constはプロジェクト全体でキッチリつかうかまったく使わないかの2択だからねえ。C++には
const objectってオイシイ概念があるけど、これなんかまさに2択。
で、ちょっと使ってみて警告(C)やエラー(C++)がでるからって、プロジェクト全体の規約に
「constは使用しないこと」なんてアホな条項付け加えて緩いコードを推奨するアフォには
俺も閉口せざるを得ない>>元発言の人
>>799 そんなことはない
データベースが文字ベースだからだよ
ONE、TWOは笑うけど
805 :
仕様書無しさん :01/09/13 20:22
>>799 せめて const char * にして欲しいよな。って違うか(藁
807 :
仕様書無しさん :01/09/13 21:02
引継ぎで受け継いだVBのアプリ(指摘されたまま放置された不良が数件あり) のデバッグをしていたところ、なぜかコンパイルが通らない 調べてみると、標準モジュールにて Global Const SPACE xxx(この部分忘れた) を筆頭になんだこりゃ状態 頼むから、最低限ステートメントと同一名称で定数宣言するなよ
808 :
仕様書無しさん :01/09/13 21:05
>>802 const_castするしか道がない?
せっかくconstで流してきたものを、どうしてもconstで無いところに
渡さなきゃならないなら、コピーを作って渡すべきなんぢゃないの?
>>809 コピーを作るコストが無視できるならそれもいいね
>>809 そうですね。いちばん最近のが、 渡した文字列が変更されることは
ありえない・頻繁に呼び出されすぎてコストが無視できない ものだっ
たので心情的につい。申し訳ないです。
812 :
仕様書無しさん :01/09/13 23:06
XMLファイルをパーサやDOMを使わず Cの標準ライブラリ関数で処理しているうちの会社に乾杯。 新しいものには大変疎い連中の集まりです。
813 :
仕様書無しさん :01/09/14 02:13
>>810 ,811
んじゃ、デバッグビルドではコピーを渡し、ついでに呼出しの前後で値が変化してないか
チェックする事までやって、それで問題なければリリースビルドではキャストで済ますとか。(わ
815 :
仕様書無しさん :01/09/14 14:32
Const A As string ='あなたはアホ' Dim B As Boolean B = A 潜在バグですってこんなんありかよ。まぁVBだからそーゆー 高貴なお方もなかにはおられるかも氏れませんが
816 :
この間違いを初心者ではない人がやっていた。過労だ。 :01/09/14 15:21
#define LEN1 5 * N #define LEN2 10 + M * 3 char buffer[LEN1 * LEN2]; /******** 逝ってよし。 ********/
>>816 それは初心者と呼んでも間違いではないかもよ。
漏れの先輩のソースコードは、ローカル変数が aaa bbb ccc とかばっかだ。
819 :
仕様書無しさん :01/09/14 15:33
>>817 本当に初心者じゃないんだってば。長年やってる人。
怖いだろ。
>>819 俺の隣にも“初心者歴 6年”ってのが座ってるよ。
今、覗いてみたら
char bf1[16], bf2[16];
int i, icchi;
icchi=0;
for (i=0; i<16; i++) {
if (bf1[i]==bf2[i]) {
icchi=icchi+1;
}
}
if (icchi==16) { /* 同じ */
:
:
}
だって。あー目まいが…
>>819 長年初心者やってる人では?
たしかに怖い。
ところで実際にやりたかったのは
char buffer[LEN1][LEN2];
と
char buffer[LEN1 + LEN2];
のどっちだ?
どっちにしろおかしいが。
822 :
仕様書無しさん :01/09/14 16:10
>>820 strcmp()を知らないってこと?
つっこみどころ満載だけど、個人的に、i++とは書くくせに、icchi++とは書かないところがウケル。
>>820 > だって。あー目まいが…
そうだな。
一致しなかったらループを抜けるようにしたほうが速い
icchi=0
for (i=0; i<16; i++) {
if (bf1[i]==bf2[i])
icchi++;
else
break;
}
memcmpなんて関数を使うと関数の呼出しコストが馬鹿にならない。
824 :
デフォルトの名無しさん :01/09/14 16:27
>816 たまたまM>=5だったのか…あえて知っててやってたらまさに逝って良しだな。 >822 memcmpでは?
>>821 char buffer[(5 * N) * (10 + M * 3)];
のつもりで、実際は
char buffer[5 * N * 10 + M * 3];
になっててマズイ、って話だと読んだんだけど…
>>822 彼にとって“++”は、for の括弧の中でしか使えないらしい。
>823 一般に0と比較したほうが高速だから、 for (i=0; i<16; i++) { よりは for (i=15; i>=0; i--) { だろう?
>>823 ん〜、そういう細かいことは最適化の観点から見ると重要じゃないんだよ。
まずね、変数名が無駄に長い。1文字にしたほうが早くなる、常識だよ?
それから、定数と比較するときは定数を右側に書いたほうが早くなるんだ。
このくらい知って無くちゃ、ハズカシイよ?
はい、最適化版。オレの足をひっぱらないように、がんばってくれよ!
char bf1[16], bf2[16];
int i, j;
for (i=j=0; i<16; i++) {
if (bf1[i]==bf2[i]) {
j=j+1;
}
}
if (16==j) { /* 同じ */
;
}
>>823 >memcmpなんて関数を使うと関数の呼出しコストが馬鹿にならない。
優秀なコンパイラならinlineで展開されるんじゃないの?
> 一般に0と比較したほうが高速だから
そうだ、忘れてた
あと0を代入するのではなく、xorを使った方が速くなるな
>>827 > 定数と比較するときは定数を右側に書いたほうが早くなるんだ。
知らなかった、と言う事は
> if (16==j) { /* 同じ */
if (j==16) {
の方がよりベターだな。
>>828 > 優秀なコンパイラならinlineで展開されるんじゃないの?
真のプログラマはコンパイラを選ばない
ちなみに俺愛用のコンパイラLSI C-86(試食版)は展開されないぞ。
ループなんか使ってたら遅いじゃあないか。 char b1[16], b2[16]; int j; if (b1[0]==b2[0]) j=j+1; if (b1[1]==b2[1]) j=j+1; if (b1[2]==b2[2]) j=j+1; : if (b1[16]==b2[16]) j=j+1; if (16==j) { /* 同じ */ ; }
>>830 > ループなんか使ってたら遅いじゃあないか。
しまった、そこまで考えが回らなかった。
カウンタもいらなくなるんでメモリ節約にもなるな
# メモリの1byteは血の1byte
しかし、しゃくに障るので揚げ足でも取っておこう。
> if (b1[16]==b2[16]) j=j+1;
if (b1[15]==b2[15]) j=j+1;
だよな?
832 :
仕様書無しさん :01/09/14 17:22
こうすればさらに変数が減るから速くなるよ char bf1[16], bf2[16]; if( bf1[ 0 ] == bf2[ 0 ] && bf1[ 1 ] == bf2[ 1 ] && bf1[ 2 ] == bf2[ 2 ] && bf1[ 3 ] == bf2[ 3 ] && bf1[ 4 ] == bf2[ 4 ] && bf1[ 5 ] == bf2[ 5 ] && bf1[ 6 ] == bf2[ 6 ] && bf1[ 7 ] == bf2[ 7 ] && bf1[ 8 ] == bf2[ 8 ] && bf1[ 9 ] == bf2[ 9 ] && bf1[ 10] == bf2[ 10] && bf1[ 11] == bf2[ 11] && bf1[ 12] == bf2[ 12] && bf1[ 13] == bf2[ 13] && bf1[ 14] == bf2[ 14] && bf1[ 15] == bf2[ 15] ) { /* 同じ */ }
834 :
最速のネタ職人 :01/09/14 17:28
longなら4回の比較ですむじゃあないか。 char b1[16], b2[16]; long* p1=(long*)b1; long* p2=(long*)b2; int j; if (p1[0]==p2[0]) j=j+1; if (p1[1]==p2[1]) j=j+1; if (p1[2]==p2[2]) j=j+1; if (p1[3]==p2[3]) j=j+1; if (4==j) { /* 同じ */
>>832 > こうすればさらに変数が減るから速くなるよ
さらに、bf1[ 0 ] == bf2[ 0 ] が偽の場合、
次の判定に逝かないからこれが最速みたいだな。
# やはり、俺のネタはいまいちだったか...
ネタスレ化してるな
>>833 ???
>>834 と
>>832 の手法を組み合わせた
char b1[16], b2[16];
if (*(long *)b1==*(long *)b2
&& *((long *)b1 + 1)==*((long *)b2 + 1)
&& *((long *)b1 + 2)==*((long *)b2 + 2)
&& *((long *)b1 + 3)==*((long *)b2 + 3)
{ /* 同じ */ }
が最速かな?
Dim 受注 as Integer VBで漢字が使えるからって「avは止めて欲しかった。
みんな、ありがとう! 早速、隣の彼に教えてあげ… …帰ってやがる!
配列のレンジミスで落ちた時って確かに思わずニヤっとするかも。
>>837 p+1, p+2とかやるよりp++のほうが速いぞ
char b1[16], b2[16];
long* p1=(long*)b1;
long* p2=(long*)b2;
if (*p1++==*p2++
&& *p1++==*p2++
&& *p1++==*p2++
&& *p1==*p2)
{ /* 同じ */ }
>>841 古いmipsだとポストインクリメントより
オフセットの方が速いぞ。
68kとかだと理想のコードが落ちるものなあ。
Pentium以降だと、インクリメントが同時実行される
はずだから、「ほとんど変わらない」んじゃないかなあ
(未確認)
で、それがこうなってるのを見ると会社を辞めようと思うわけだ。 char b1[16], b2[16]; long* p1=(long*)b1; long* p2=(long*)b2; // 分岐のストールが少なくてハエーヨ if ( (*p1++==*p2++) & (*p1++==*p2++) & (*p1++==*p2++) & (*p1==*p2)){ /* 同じ */ }
>843 ちなみに、ここの例にあわせてあるけどこんなコードは実在した。 が、私が辞める前にそいつが辞めた(つーか首にさせた)のでとりあえず 私はまだ辞めてない。 良かったんだか悪かったんだか。
845 :
( _ 。。) _ バタ。 :01/09/14 19:47
>>843 ……ミスってるじゃん。(汗) > &
#b1 ・ b2 共に 記憶全てがNULLでなければ…って処理だな。 これじゃ。/* 同じ */ じゃないだろ……。
それと…ポイント移動させたら戻しませう。
一部の職場ではネタではないのが恐い
きみたちねぇ、速度ばかり気にしていちゃだめだよ。 *p1++==*p2++ってのが何度も出てきているのを見て気持ち悪いと思わない? こーゆー部分は一カ所にまとめなくちゃダメだよ! char b1[16], b2[16]; long* p1=(long*)b1; long* p2=(long*)b2; #define i (*p1++==*p2++) #define ta && (*p1++==*p2++) if ( i ta ta ta ){ /* 同じ */ } インクリメントが二個余分だけど、ずいぶんスッキリしただろう? ほんの少し速いコードばかり追求していちゃぁ、一人前とは言えないぞ。まったく。 #みんなこーゆーネタ好きね(w
出遅れたが、 先頭から比較した方が速いか、 後方から比較した方が速いか、 きちんと統計を取ってからコード書けよ!
850 :
♯6411 :01/09/14 22:17
*p++ 使うか *(p + 1) 使うか p[1] 使うかの違いで 速度が変わるようなコンパイラは機能が低いのでは? それともわざと最適化レベルを最低にしてソースに 忠実にコンパイルさせた時の話か?
852 :
仕様書無しさん :01/09/14 22:27
#include <stdio.h> int main(){ char a[16]="..............."; char b[16]="..............."; long long *lla = (long long *)a; long long *llb = (long long *)b; if(lla[0]==llb[0] && lla[1]==llb[1]) printf("OKEY\n"); else printf("NOGOOD\n"); return 0; }
128bitコンパイラならきっと、intの比較で一発だね
>>838 大昔、「群コード」を一部、「郡コード」って書いて、まる一日バグ原因
が判らなかった事が在って以来、変数名の漢字使用は厳禁としてたけど・・・。
今日、「データ」と「デ−タ」で久々にやっちまった・・・学習力ねぇ。
855 :
仕様書無しさん :01/09/15 00:07
っていうか、漢字使用の変数とか関数は、暗黙のルールで禁止になってないか?
856 :
仕様書無しさん :01/09/15 00:39
同じプロジェクトにいる奴のソース見てみたら 長いswitchの中に、長いswitchとか入れてる。バカじゃん、こいつ。 そいつがプロジェクト仕切ってるからやりずれーよー。俺的にはクビ決定。
857 :
仕様書無しさん :01/09/15 00:55
>>11 どこのスレだったか
そういうのを正しいって言ってた
ヴァカが居たな。
コンパイル通るだろ?
OKじゃん。
…ヴァカ過ぎてつっこめなかった。
858 :
仕様書無しさん :01/09/15 00:59
>>40 COBOLERが上だと
かなり苦労する。
マシン無くても良いと
思ってたりするからなぁ。
おまえ、頭の中に
メモリ空間とか全部描けて
コンパイル一発で通せるのか?
ゴルァ、と良く怒鳴りたくなる。
859 :
( _ 。。) _ バタ。 :01/09/15 03:58
>>847 お。 なんか、見た目カッコイイぞ。 外部ツッコミ覚悟で俺的採用。
でも…よぉぉく考えたら「他にも使うかもしれないから、真面目に関数作れ」 と頭が警笛ならしてるんだが……。
ま。いっか。 いいよな。 よし、警笛OFF。
>>850 ボブ…気にするな。 というか、気にしないでくれ。 たのむよママン。
自分でそう思いながらも書いてしまったのさね。
>>851 …やっぱ速度変わるんじゃないか? クロック単位で。
気にする程のモンじゃないたぁ思うけど…それでもこの手の議論は何時までも熱いのさっ♪
(ホント…古今、ずっとクロック単位になりそうな速度の話は尽きないよね…)
dataとdateを間違ってて判るまで一日かかったぞ それ以来dataとdateは使用禁止にしてやった
つまり、バカの集団だからバカのミスに気付かなかったって訳だね!
>>860 そゆレベルで禁止なんて
久しぶりにドキュソ発見。
きみだよ、きみ、
ぜったい一緒に仕事したくないYO!!
863 :
仕様書書かないさん :01/09/16 02:33
>まずね、変数名が無駄に長い。1文字にしたほうが早くなる、常識だよ?
1文字だと自動的にレジスタ変数になるわけ?
バカなコンパイラだね。
>>826 一般に0と比較したほうが高速だから、
for (i=0; i<16; i++) {
よりは
for (i=15; i>=0; i--) {
だろう?
変数そのものを評価した方が高速です。
0を含む正の数より負の数かを評価した方が高速です。パイプラインで効率がよくなります。
デクリメントよりインクリメントの方が高速です。
i!=0 ならTRUE
i==0 ならFALSE
forのループは評価式がFALSEで抜けるから
for ( i = 15; i; i-- ) {
または、
for ( i = 0; i<16; i++ ) {
iがunsignedの場合、常に0か0以上なので、i>=0の評価は常にTRUEになり、無限ループに陥ります。
よほどの理由がない限り、このようなバグりやすいコーディングはしないでしょう。
TRUEとFALSEは間違ってないよね?
なんかCとWindowsとでは逆だったような・・・
864 :
仕様書書かないさん :01/09/16 02:39
>>860 どの変数で問題が起きているか分かったら、
その変数がどこで使われているか列挙する。
それぞれで適切に使用されているか見るだけだから、
問題解決に1時間もかからないでしょ。
目が悪いなら見やすいフォントに変えたら?
865 :
仕様書無しさん :01/09/16 02:44
>>863 >変数そのものを評価した方が高速です。
>0を含む正の数より負の数かを評価した方が高速です。パイプラインで効率がよくなります。
>デクリメントよりインクリメントの方が高速です。
うそばっかり書くなよ。
866 :
仕様書書かないさん :01/09/16 03:10
ちょっと間違い。
15回のループがある場合、i==0で抜けるとi==0の時実行されないので、
16〜1の間で処理することになり、使いにくい。
>>865 変数にはゼロフラグがあり、ゼロであるかを調べるのは高速です。
また、負であるかどうかも、1ビットを調べるだけなので高速です。
しかし、正の整数であるかはどうやって調べるでしょう?
分岐の問題については、
例えば、i < 15 を評価する場合、i - 15 の結果が負であるかどうかを調べます。
右辺が0の場合には計算をしないとしても、
i >= 0 の評価では、0であるかを調べ、さらに0より大きいかをしらべます。
パイプラインでは同時にいくつもの命令を並行して演算しますが、分岐がある場合は確率的に高い結果が出るものとして演算を続けます。
もし分岐して予測が外れた場合、演算は無駄になり、分岐処理がパイプラインから抜けてから次の演算を続けることになります。
最新のCPUではどうか知りませんが、数年前までのCPUでは予測がヒットする確率が高いのは1つの分岐のときです。
パイプラインはCPUの高速化のための技術ですが、予測が外れやすいコーディングではその恩恵を受けられません。
演算結果が0であれば抜け、正であれば抜けるような処理をするよりは、
演算結果が負であれば抜け、それ以外は続行した方が効率がいいのは明らかです。
867 :
仕様書無しさん :01/09/16 03:24
>>866 >変数にはゼロフラグがあり、ゼロであるかを調べるのは高速です。
>また、負であるかどうかも、1ビットを調べるだけなので高速です。
>しかし、正の整数であるかはどうやって調べるでしょう?
これって、どのCPUの話?
君の知ってるCPUって、条件レジスタ(フラグレジスタ)にゼロフラグしか
なかったの?
というか「変数にはゼロフラグがあり」ってなんのこと?
変数ごとに条件レジスタもってるアーキテクチャなんて初耳なんだけど。
>>866 どう見ても、アセンブラ知らない厨房が背伸びして書いてるようにしか
見えん。
869 :
仕様書書かないさん :01/09/16 03:33
そうか、変数にはゼロフラグはなかったか。 コーディングには影響しないから大した問題じゃない。
>>866 >例えば、i < 15 を評価する場合、i - 15 の結果が負であるかどうかを調べます。
>右辺が0の場合には計算をしないとしても、
>i >= 0 の評価では、0であるかを調べ、さらに0より大きいかをしらべます。
この前提が大間違いだから、これ以降のパイプラインがどうこうって
話はまったく意味なし。
つーか、なんでここでパイプラインを持ち出す必要があるんだよ。
小難しい話をして、相手を言い負かそうってつもりなのか?
大笑い。リアル厨房か?
871 :
仕様書書かないさん :01/09/16 03:47
>>870 じゃあどうやって i < 15 を判断して分岐するのか説明しろ。
872 :
仕様書書かないさん :01/09/16 03:53
確かアセンブラでは、 無条件ジャンプと条件ジャンプがあって、 0のときと負のときの条件ジャンプがあったと思うが、 (正のときがあったか覚えてないけどあるんだろう) for ( i = 0; i < 15; i ++ ) { を処理するときに i と 15 を比較して上記ジャンプを利用するしかないと思ったが、 計算方法が違ったか?
>>872 だから、どのCPUか言ってみろよ。
あれだけ断言口調で言ってるんだから、そうとう知ってるんだろ?(o^-')b
キャリーフラグも知らない知ったかぶり厨に説明するだけ無駄。
まあいちおう書いといてやるか。Intel系なら
cmp eax, 15
jc XXX
それ以前に
>>826 はネタであることを理解してる?
忘れたけどこんな感じだったっけ? mov ax,0 mov si,i_work mov ds:[si],ax loop: mov si,i_work mov ax,ds:[si] cmp 15 jmp c,loop って感じで15なんか引かないと思われ。 (スペースが削除されませんように)
>>863 を見た段階で、知ったか厨房だってことはバレバレじゃん。
「まだばれてない、ハッタリで言い負かせる」って思ってるのは本人だけよ。
>>876 いや、彼らの目的は違うところにあるかも?
ひょっとしてヤツらは、イスラム原理主義者で
ソフトに意図的にバグを入れることにより、
経済を停滞させる、新たなテロかも・・・・
もっとも、テスト段階で発覚しそうなことばかりだが。(藁
878 :
仕様書書かないさん :01/09/16 04:21
>>875 だから、15と比較(つまり差を取る)して結果をレジスタに入れるんでしょ?
負であるかを調べるときは1ビットシフトするだけだから、2つのデータが必要な差を取るより1つのデータで済む論理演算のほうが高速でしょ?
命令数が少なくてもそれを処理するのにかかるサイクルが多ければ意味ない。
>それ以前に
>>826 はネタであることを理解してる?
それが分からなかった。
879 :
仕様書書かないさん :01/09/16 04:24
あ、差を取る必要なんてなかった。 内部のロジックでビット演算すればいいのか。 どうせキャストして同じサイズになるし。 ・・・。
なんかずいぶん突っ込みどころがかわってきたな、おい。
>>878 -879
必死に論点をずらそうとしてるが、それがまたマトはずれ。
痛すぎる。
1) i < 15 2) i >= 0 1)のコードは条件分岐が一回で済んで、2)のコードが条件分岐が 2回になるって言ってるやつは、どんなCPU使ってんの? すごくマイナーな8ビットCPUでも使ってんの?
COMETUではないかと思われ。
884 :
仕様書書かないさん :01/09/16 05:05
885 :
仕様書書かないさん :01/09/16 05:12
いやあ、ちょっと変だとは思ったんだけど。 遅くないなら別にいいや。
886 :
仕様書書かないさん :01/09/16 05:19
漢字を読めない男が、他人の手紙を覗き見て 文中のひらがなだけを無理やりつなげて読んで とんちんかんな解釈をしたあげく ついには殺人を犯してしまうという小説があったのを思い出した。
888 :
仕様書無しさん :01/09/16 05:34
下手な考え休むに似たり ふつーの人間よりゃコンパイラの方がCPUについてよく知ってるよ
>>886 アセンブラで組むわけでもないのに、そういうレベルのことを
考えてコーディングしてんの?
┐(´ー`)┌
この一連の話題のように、知ったかぶりとハッタリが完全に見透かされてるのに
必死に反論してるヤツってこの板でたまに見かけるけど、うすら寒いものを感じるな。
虚言癖ってこういうのを言うのか?
>>887 も指摘してるけど、反論の内容は、検索かけてそれらしいものを
ツギハギしてるようにしか見えないし。
そんな事で、本気でごまかせると思ってるかな?
891 :
仕様書書かないさん :01/09/16 06:12
はいはい、実際のアセンブラなんて知りませんよ。 高速化のためにところどころかじってるだけでね。
もう
>>863 の時点で“ネタにマジレス、しかもデタラメ”なんだけど。
…はっ!そういうネタ?
一連の話題が示している可能性 ・ネタを理解するには、相応の知識と経験が必要。 ・「ネタにマジレス」と「ネタにマジレスするふりをしたネタ」の区別は難しい。 もう少し正確に表現すると「ネタに(マジレスするふりをしたネタに)* マジレス」と 「(ネタにマジレスするふりをした)* ネタ」の区別は難しい。 さて、どちらの解釈がより適切でしょうか。
さて、上記のような文章だけではわかりずらいと思いますので、次に示す下の図をごらん下さい。
∧,,∧ / ̄ ̄ ̄ ̄ ̄ ミ ,,ミ < ♪パッパッパッパ・・ ミ つ \_____ @ ミ 'ヽし' キュッ キュピィィィン + / ̄ ̄ ̄ ̄ ̄ ∧,,∧ < 踊ろ♪騒ご♪ ミ,・∀・,ミ . \_____ (( ⊂ つ )) + ミ ミ ''とノ'' クリッ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧,,∧ < ッパッパッパッパ ミ,・∀・,ミ | パパパでゴリュア♪ ( つ ), \__________ ミ ミ "U'''(ノ゙ イッテヨチ!
プッチモナーか。懐かしいな。
つまり、高速化したコードの話題がネタだったことに気付かなかった奴が 何人もいるってことか? 情けない…
>>897 完全版
つまり、高速化したコードの話題がネタだったことに気付かなかった奴が
何人もいるってことか?
俺と同レベルの奴がそんなにいるとは、情けない…
>>893 ポインタのポインタのポインタのようだ。
900 :
仕様書無しさん :01/09/17 12:27
>>838 変数の漢字名なんぞあたりまえのように使ってるあほ業界も
あるぞ。
そんな業界には逝ってほしいのだか。。(w
901 :
仕様書無しさん :01/09/17 12:38
>>866 ずいぶん新手のCPUだな
オリジナルならマイクロコード見せてくれ(w
902 :
名無しおやぢ :01/09/17 12:39
>>838 以前、AccessのVBAコードでコントロール名に「ナンバー」を
使用したら、実行時に暴走してアプリケーションエラーとなった
ことがあります。(W
>866 pentium4 は整数演算が遅い 整数演算が遅い 特に shl, shr が遅くなった 従来の最適化は通用しない
詳しくは www.intel.com に software optimization for pentium4 ... っていう pdf があったな
というか、866はあほ
906 :
仕様書無しさん :01/09/17 19:42
そこまで考えるならアセンブリ言語で書けばいい、と思うが。 もっとやるなら CPU ごとにルーチン変えて用意しろ、と思うが。 その前に 16 くらいのループが普通ホットスポットなんかになるか、と思うが。 そんなどうでもいい処理まで高速化してソースの管理を難しくするな、と思うが。 そんなソース読む方の身になってみろ、と思うが。
823以降866より前はどうでもいいことを知っててやってるネタだろ。 866以降は知らんが。
908 :
仕様書無しさん :01/09/18 09:11
910 :
仕様書書かないさん :01/09/19 00:31
ここの人アセンブラ使ってるの? アセンブラ使うのってどんなソフトのどの部分? 地図を高速でスクロールするときでも必要ないんだけど。 MMXとかSSEでガンガン高速化してるの?
911 :
仕様書書かないさん :01/09/19 00:35
デバドラとかエンコーダをアセンブラで小さく速くするのは大歓迎だよ。 でも実際アセンブラ使ってるのかな?
912 :
仕様書無しさん :01/09/19 00:42
>>910 ジュースの自動販売機。
パチンコ。
スロットマシン。
エレベーター。
913 :
♯6411 :01/09/19 00:59
ポータビリティを無視してでも高速化したくなる 場面ってのは、確実にあるのだよ。 たとえそれが、x86 PCで動くものでも。 反論松
>>910 この世にアプリケーションプログラマしか存在しないとか、この世にx86の
CPUしか存在しないとかいうような発想は捨ててくれ。
デバドラなんかでタイミングを正確に取るためにアセンブラで書くとかいう
のはわりと当たり前。
あと、OSのブートコードなんかは当然のようにアセンブラで書くわな。
昔はx86のアセンブラも使ったが、最近はやってないなぁ。
MIPSやARMのアセンブラならつい最近も書いたが。
スレと関係ないのでsage
>>タイミングを正確に取るためにアセンブラ 速いCPUにしたらプリンタが文字化けしだしたのは お前のしわざたな
>>910 μsオーダーでの同期を要求されるリアルタイム処理なんかざらにありますが何か?
>>915 組み込みやっちゅーねん。
基盤に半田ゴテあててCPUを引っぺがして交換したっていうならしかたな
いけどさ。そんなもん保証外に決まっとるわい。
それ以外なら、文脈を読め。
918 :
仕様書無しさん :01/09/19 19:29
思いきり低レベルな話で申し訳ないが。 今日見た Access の VBA のコード、ループカウンタを Public で宣言してあった。 ...まさか VBA ってそういうものなの ?
919 :
仕様書無しさん :01/09/19 19:42
WoW iをExternしてあるソースみたことあるぞよ
int ntt; int jt; char jr[20]; なにこれ?と質問したら、「なんとなく」 こんな変数ばっかしで動いているのか、この管理システムは・・・と思うと 辞めたくなった。
株でもやってるのかと思ったけどそんな株買える奴がPGやってるとも思えず
>>920 -921
ちょっとほっとした。
Access ははじめてどころか Microsoft の環境自体が N88BASIC(86) 以来で、
ついこないだ Jet の排他は信用するなという話にひっくり返ったばかりなんで
スコープも気をつけなきゃいけない理由があるのかと、半分くらい本気で考えてた :-)
919-920、か。失礼。
具体的なイメージがすぐに湧くソースのほうが、バグが少ない。 意味のない aaa、bbb とかよりははるかに良い。 そいつは実はすごいんじゃん。 ほれも真似しようかな。 >921
926 :
仕様書無しさん :01/09/20 22:05
>>925 変数名はnttだけどNTTとは何の関係もないとかいう
オチじゃないのか?
927 :
名無しおやぢ :01/09/20 22:37
>>918 ちょっと前に別の板でも書いたんですが、SQL文字列変数が、
PublicなPGを見たことがあります。(メンテしたくねぇ!)
あちこちがめちゃくちゃで、とてもプロが書いたコードとは
思えませんでした。
(宇津田士農・・・)
928 :
仕様書無しさん :01/09/21 00:12
6次元配列っていったい何?(鬱
賢いのは
>>927 だけのようだ。
konami = getDATACOUNT();
for ntt = 0 to konami
...
next ntt
てな感じだったんだよ
>>928 4次元配列使ってる奴をドラえもんPGとか言って笑ったけど、
更に上がいるのね・・・
力学系で、6階のテンソルとかはでてくるけどね(w たぶん関係ないからsage
932 :
仕様書無しさん :01/09/21 21:42
933 :
仕様書無しさん :01/09/22 15:48
if if if if if ・・・・・・・・・・・・・ ・・・・・・・・・・・・ 「直しといてね♪」 「・・・・・・・」
935 :
仕様書名無しさん :01/09/22 18:34
select A,B,C from T where D not is null
938 :
仕様書無しさん :01/09/30 00:26
>>745 具体的明確な説明ができないという事は
あなた
本当に説明したい内容を理解していないんですよ。
あなた
本当に頭の回転がわるいですね。
あなた
自覚しろよ
なんかの歌詞みたい。
___ | \ \ / / )))) | / /_ ⊂ノ | ヽヽ |\ / / / i 、、 | ヽヽ |\ | \ / / \ \ ∧ ∧ ド ド |ヽ |\ | | / / \ \( ゚Д゚) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ / / ヽ ⌒\ < 今だ!940番ゲットォォォォ!! / ノ /> > \_________ / × / 6三ノ / / \ \ ` ̄ ― / ん、 \ \ ―― (__ ( > ) ⌒ヽ ’ ・`し' / / 人, ’ ’, ( ̄ / Y⌒ヽ)⌒ヽ、 ) | \_つ