今いじっているソース。
/*****************************************************
XXシミュレーション
1989/02/22
:
1992/08/02
:
2003/10/03
:
2006/06/12
:
******************************************************/
#include <stdafx.h> // VCに移植
:
return(ret);
}
#include "F00d0001.c"
#include "F00d0002.c"
#include "F00d0003.c"
: ← 延々と#include
#include "F10d0022.c"
#include "F11d0001.c"
int r020001() {
:
#include "F22r1012.c" ←関数の中なのに
#include "F34c2023.c"
:
}
名付け方や羅列っぷりはひどい感じだが、
別に関数の中だろうがナンだろうが構わんけどな。
ファイル名も関数名も酷いな。
*.cをincludeする事自体には問題少ない。
古めのX11のプログラムだと、*.xbmとかincludeしてるしな。
(XBMはCの配列に見えるように作ってあるフォーマット)
昔見たCのソースで
(hoge1.c)
……
#include "hogehoge.c"
……
(hoge2.c)
……
#include "hogehoge.c"
……
なんというかもう少しこう、分割コンパイルというか……
>>4 > 古めのX11のプログラムだと、*.xbmとかincludeしてるしな。
それは、かなり例外的な話で、普通 *.c をインクルードする状況は
あまり勧められないと思うよ。
んなこたぁみんなわかっているさ。
>>6には。
>>4をスルーする能力がつきますように。
ひどいのになると
int hogehoge() {
:
#include "fuge.c"
if (xx>0)
goto fuge001; ←ラベルがfuge.cの中
なんてのが本当にあるからなぁ。
>5
言いたいことがイマイチ判らんが、共通定義部分だからこそ、ヘッダファイルで外出しに
してincludeしているんじゃないのか?
定義なら.h使うだろうから、同じような関数がstaticで入ってたり、だとおもうよ
恥を晒すがCの仕事を始めた頃に #include "hoge.c" をやって注意された。
なんか懐かしいなぁ....
皆もわかってると思うけど『Makefile を管理する人の身になれ』ってのが駄目な理由ね。
はあ?Makefile以前に可読性わるすぎだろ。
>>13 Makefile がどう関係あるんだ?
手動で依存関係作ってるってこと?
16 :
仕様書無しさん:2008/07/31(木) 14:12:41
>>11 インライン展開する関数の代わりかな。
コンパイラが貧弱で最適化が行われないチープな環境なんだろう。
8ビットとかの。
長い間、hoge.cをインクルードできることを知らなかった俺
> インライン展開する関数の代わりかな。
それなら、普通にマクロ定義して展開させるだろ。
マクロじゃなくてもinlineでおk
20 :
仕様書無しさん:2008/08/01(金) 01:02:34
ていうかコンパイルオプションでよくね?
サイズだってオプションひとつで変わるし、
インライン展開がふさわしくない関数とかも判断してくれる。
>>14 俺がやったのは関数単位だったので可読性に問題はなかったと思う。
何を意図してそうしたかは謎だが...
>>15 そうだよ。mkdepend 使うと include されたソースがコンパイル通らなかったりするし。
出来るってのはやっても良いって事じゃないんだよ。
23 :
仕様書無しさん:2008/08/02(土) 00:01:56
このスレまとめのテンプレとかないのが惜しいね
こんだけスレ数進んでたら香ばしいのも結構集まってる気がするんだけど
漏れは新参なので古い話はわからんです・・・
1行80文字のうち
右端30文字がコメント列
コメント列のうち
右端6文字が変更番号
てのは甘い?
若輩の俺にはWindows環境で80文字の制約守る意味がよくわからない('A`)
>>22 同意
俺こんな凄い技知ってるんだぜって奴のコードは正直読みたくない
ROM容量超ギリの場合なら設計資料添付してくれたら読めるが、
「ソースコード=仕様書です。それが何か?」ってのが意外と多い世の中
(特にB型に多いな・・)
>>24 80だと確かに少ない感じだけど、一行が長いと、レビューとかで、コードを印刷するときに、
折り返しが入って、すごい読みにくいね。
>>24 ケースバイケースかと
無理に80文字に詰めて読みにくくされる位なら、
コードレビュー時に用紙横印刷してくれた方が嬉しい
その場の書き方に合わせるという方法もお勧め
文句言う奴が減るよ
28 :
24:2008/08/02(土) 00:39:34
>>26 そう考えると利点もあるんだなあ。
でもこの制約のせいで、関数のコールにほとんどの場合3行以上使う('A`)
>>27 規則とかで決まってるわけじゃないけど、縮小して、一枚に4ページを割り付けて
印刷するってのがデフォになってるんで。。。
C#で仕事してるけど、ネームスペースとかクラスのインデントがあるんで、
たしかに80桁だと苦しいけど、100桁くらいなら、まあ、自然に書けると思う。
120桁を超える行があちこちにあると、もう画面でも読みにくいし。
>>27 昔からの慣習を原則にしちゃったのか守らざるを得ないんだ。
守らないからと言って特に注意されることはないけど、皆しっかり守ってる
>>29 ごめんなさい、言語書き忘れたけどちなみにC。
30文字がコメント列なので、有効なソース列は50文字。
CでもキツいからC#だと想像できないな・・・
32 :
24:2008/08/02(土) 01:01:20
すまん
>>31は俺な。
ほとんどカキコしないから慣れないなぁ
大きなディスプレイ買え。印刷するな。
モニターでかくても、横に長すぎるコードは読みにくいよ。
>>31 いくらCでも50桁だとな…
ポインタとか使っちゃうとすぐただの代入文が三行必要にならんか?
そのために変数名短くしてたりするのかな。
問題は
>>24の会社に
ソースの良し悪しを判断できる人間が居ないってことだろうな
誰かが改善しない限り糞ソース量産会社になる
フルスクリーンでエディットしているやつが多い。
右側スカスカで、マルチウィンドウの意味なし。
そのせいか、右側まで伸びている行があっても気にしない。
インデントしすぎで左側がスカスカのソースは良く見る。
80文字制限を課せられたときは
端末が物理的に80文字なんだろうと思うことにしてる。
パンチカード使ってるんじゃね?
42 :
24:2008/08/03(日) 06:10:40
>>36 なるなる。こういうの↓を多用せざるを得ないので余計に困る。
aaaap = (ulong *)INPUT(&(((bbb_bbbt *)cc_ccccp->ddddl)->eeeel));
>>37 言われてみたら確かに、ロジックの善し悪しを言われることはあっても
ソースそのものの善し悪しを述べられたことはないな。。。
> なるなる。こういうの↓を多用せざるを得ないので余計に困る。
> aaaap = (ulong *)INPUT(&(((bbb_bbbt *)cc_ccccp->ddddl)->eeeel));
局所的に使うならまだしも、こんなのを多用してるとすると、
そりゃソース指摘以前のレベルだわな。
>>42 多用するポインタは別のローカル変数に入れとけよ
構造体の間接参照が多段すぎ。JK。
>>42 ネタじゃなくマジでそのコード使ってるならそんな会社辞めた方が良い
理由は
>>22の通り
周りの悪環境に染まりすぎると本人にとって悲惨な結果しかまっていない
47 :
24:2008/08/03(日) 14:41:02
>>46 疑問を持ちながらも、インフラ系の組み込みだから多少特殊なのかと思ってた。
忠告、ありがとう。
でもちょうど再来月で辞める予定なんだ。
他にやりたい仕事があるし、この会社にも未来感じてない。
どうせ辞めるなら、辞めてからでもいいので会社名晒してくれ。
辞める気は無いんで社名は伏せるけど
日立三菱富士通ソニー日本IBMNEC東芝NTT・・まあそんなレベルの会社。
コードの詳細は忘れたけど
if (・・・) {
if (・・・) {
map
.put(Hoges.HOGE
Integer.valueOf(a));
map.put(Hoges.FUGA, BigDecimal
.valueOf(b));
Something.method(c, d, e, f, g,
h.moreMethod(i, j, k),
l.moreMethod(aaa, bbb, ccc
ddd, eee, fff, ggg, hhh, iii, jjj));
Something.anotherMethod(c, d, e, f, g,
h.moreMethod(i, j, k, aaa, bbb, ccc
ddd, eee, fff, ggg, hhh, iii, jjj,
kkkkk,mmmmm, ooooooo));
}
}
みたいな、なんかうまく書けなかったけど
本当に奇麗なグレート・ブリテン島のAAが出来上がってた。
30個も。
ほぼ同じ内容で。
>>49 その中にない大手なわけだな。
・・・
シャープかパナソニックか
だが、そのどれでも納得してしまいそうだが。
目立系のコーディング規約がひどいというのはよく読むな。削除コードを全てコメントで残すとか。
55 :
24:2008/08/03(日) 20:59:06
>>48 約束する。
しかし・・・うかつだ、
もし職場の人がこのスレ見たら
>>42と
>>47でこれで完全に足がつくw ('A`)
円満退社できますように願いつつ話題が脱線sage
>>54 『ポインタの参照は禁止』ってどういう意味?
"->" の禁止って事だと C/C+++ のコードは書けないよなぁ
>>24 待て。足が付くなら社名書いちゃまずかろう。 w
>>58 そうです。
禁止事項だろうって笑ってました。あはははは
60 :
24:2008/08/04(月) 02:07:10
>>57 ( ゚д゚ )!
ソースコードと社名を結びつけたことで名誉毀損とかで訴えられるとかだったらやめとく
61 :
57:2008/08/04(月) 03:08:42
>>60 名誉毀損とかはないだろうけど。完全に縁を切るならいいのかもな〜。
そうでなかったら気まずいんじゃないかと思ったのさ。
ポインタのポインタ禁止すると多次元配列とかどうするんだろ?
ジャグ配列が使えないってだけで、なんで多次元配列がダメになると思うのか。
しかし、そーゆー脳足りんルール押し付ける職場って実在するんだな。
配列[i][j]とか、配列[n][m][l] とかやるに違いない。Fortran時代はふつうにやってたし・・・
はあ?
ポインタのポインタが禁止されたら、配列のような表記にするだけさ。
ダブルポインタと配列にどういった繋がりがあるのか良く判らない
a[ N * i + j ] みたいにするんじゃね。
……やれやれ。
まあロジックは配列にあわせる必要はある。
要素のサイズは固定で、まとめて全部アロケート・リサイズ。
ポインタの入門書の大半は、配列参照で書いてる所が多いので
配列うんぬんの話題がちらほら出てるのかな
と、配列の話題が出た原因を想像してみた
配列の話を膨らませるつもりは無い。次の話題どうぞ
では次の話題
VARCHAR2(1) なカラムに '△' を INSERT/UPDATE してた
仕様書にはそう書いてあったかもしれんが
それは半角スペースだろJK
そんなコード書いて平気な連中は
毒餃子で氏ねばいいのに
多次元配列の話を振った者だが...
ジャグ配列が使えないとサイズが未知な場合や非矩形な場合にメモリ効率が悪くなると思うんだけど
...資源が豊富な今となっては考慮に値しないんですかねぇ
「ジャグ配列」をググって来ましたか。結構結構。
>>72 それ、JK?
ファイルは固定フォーマットが当然、って時代は
よく△とか?とか使われてたけど、
最近殆ど見ないよ。
/* ところでそのカラム、varchar2(1 char) だと
エラーにならず正常に格納出来てしまうという罠が */
あ、バケたかも。「△とか」の次の記号は U+2423 ね。
半角SPを△で表してたのは仕様書が手書きの頃だな
ところでJKって何?
女子高生
>>76 俺も最近言われたので調べたよ。
「常識的に考えて」の略らしいが。「常考」とも。
某社系列はまだ半角スペースが認識しづらい年寄りのために使ってますよ。
>>76 このレスを読むまで△の話題の意味がわからなかった。
固定長を扱うときにデータそのものを固定長にしておくわけか。
汎用系は全くさわったことなくて、ファイルIOで固定長に対応してたよ。
可変長で普通にやってる所、最近は老人のコーダ代わりに
固定長でやってます。
帳票だすのに固定長の馬鹿でかいtxtファイル作るのはねぁ・・・。
>>78 そんなの判るかぁ
『純粋な考察』でも『熟女の腰砕け』でも『自民党は国家犯罪組織』でもとれるぉ
日本語のアルファベット化反対!!
>>82 んなこと言ったら、NHKなんてどうなるんだ。w
懐かしいな練馬変態倶楽部
練馬名物股ぐら納豆 っていうこまわりくんのネタがあったな
>85
略すと……NMN? NMMN?
なんだろう、よくわからない。
ヒューマンライフこまわり君 海岸通りの糖尿病
お前らが見た最も大きなソースってどのくらい?
俺が見たのは2MByte、秀丸さんが気の毒になったぉ
....しかも関数4つしかなかた
行数でどのくらいだったの? 言語はFortran?
俺は1.8MBくらいだったな。
ほとんど使われなくなった関数でコメントアウトされているかまとめて#if 0になってた。
VSSで管理しているのに修正したり,関数ごと書き換えたりしたときに元のコードを消さないからこうなる。
>>89 約20Kステップで最大の関数が約8Kステップ、ありえないC言語
ちなみにコメントアウトされた履歴が残ってるとかではない(俺が始めてメンテした)
コピペって怖いなぁと心底感じた
書いた奴は当然いない訳だがソースに書いてある名前を見たら別の現場でちょっと教えた奴
1関数は100ステップ以下にしろとあれほど言ったのに...
俺はステップという単位がいまだにわからない
改行コードの数がステップなのか
文字の数がステップなのか
Byte数がステップなのか
何らかの塊がステップなのか(これはファンクション何ちゃらだっけ?)
20Kステップ、コメントアウトされたコードがあまりなくて2MBて計算合わなくね?
1行あたり平均100文字?
コメントは多いのかな?
関数が3つほどまとめて#if 0で切られてるの気づかなくて
そっちを一生懸命なおしたことある。
ちなみに各関数は4千行前後。
#if 0とかは1画面に収まる範囲でやってくれないと厳しいね。
>>94 別に4千行の関数書いた池沼を擁護する気はないが、
#if 0 〜 #endif までを色違いにするエディタくらい使おうぜ
>>96 後出しですまんが、今は無きDECのWSにそんな高尚なエディタは当時なかったんだ。
たぶん今も無いと思うが。
FTPでWinに持ってきて秀丸等でって事ができる環境でも無かったんだ。
若い子はDECって言われても分からないかもしれないけど。
Doキーを制する物は世界を制するのさハハハ
モノクロのVT100で、#if 0〜#endifは反転ブリンクなんて設定だったらストレス溜まるだろうな...
>92
> 俺はステップという単位がいまだにわからない
ちょっとした疑問だが、デバッグってどうやってんの?
今時のソースコードデバッガならステップ実行が基本単位だと思うが…。
今時つっても環境は千差万別じゃないの
ええ、俺は携帯電話はもうこりごりですよ
>>100 今時のコンパイラが吐くコードならソース上のステップとデバッガのステップ実行が一致しないのは普通だが?
ネットリストを入れていいなら500MBなんてのがあった。
修正どころか表示することすら手間がかかる。
ステップについては、名称からの誤解か?「実行文に限る」 という縛りがあったな。
んじゃ100行のcase文で実行すれば100stepだが、関数table[100]で実装したら3stepかい?
てな話はよくあった。
ステップ数で見積もりや進捗報告とかHは滅んで欲しい
caseを100も分ける時点でDQNコードと思われ。
分かりやすい例え話だろ
>>100 LEDチコチコです><;
ってのは半分冗談だけど、デバッガのステップと作業見積もりのステップは別物だと漠然と思ってた
デバッグでいい方法思いついた。
バグの好きなえさを撒いて集めて網で掬い取って佃煮にして食べたらいいと思うよ。
>>109 つ[リテラル]
つ[頑張って一行に纏めた式]
>>109 よそのプロジェクトのバグも集まってくるよ
>>107 そうか?table[100]の中身を定義する段階で同じ程度のステップ数になると思うが?
というかむしろステップ数増えないか?
全部違う関数なら当然増えますね。仕切が多くなるし。マトリックスなんかだと、同じ関数を
指す中身が多かったりするので、あまり増えず可読性が良いこともあります。
表引きで済むのにcase使うというのも、step数稼ぎの定石(w
>>113 同じような処理が多い場合も
switch (...) {
case X1:
case X2:
case X3:
X関係の同じ処理();
case Y1:
case Y2:
case Y3:
Y関係の同じ処理();
....
}
てな具合にまとめることになるけどな。
うちのソースなら
int x = 2;
switch ( x ) {
case 1;
case 2:
(略)
case N-1:
case N:
}
で、最初にxに代入してるのだけが違う処理が
そこかしこにちりばめられてるね。
ってなってるね!どうだ参ったか。
if ("YES" != "絶対!")
{
//ダイターンな処理
}
ミスった
if (::strcmp("YES", "絶対!"))
{
//ダイターンな処理
}
>>92 行の意味でstepを使った俺が悪かったかも知れん...まぁ堅いこと言うな
>>93 ・モジュール化という概念の無いコード特有の多段インデント(タブはスペース)
・セミコロンまでは必ず一行に書くポリシー
・各行末には役に立たないコメント
よって128文字を超える行も目立つコード
読むのしんどかったぉ
>>115 別に珍しくねぇよ
その手のコードでは switch に default が無いのも一般的だよね
if文追加によるインデントでテスト工数増やすのが嫌なので
「カラムズレアリ」とか書いてインデントしないのが常識になってるソース。言語はC。
インデントと工数にどういう関係が?
122 :
120:2008/08/20(水) 02:25:18
>>121 1文字でも変更のあった行には変更番号を振らなければならない。
というコーディング規約。
そして変更番号を振った箇所は全てデバッグしなければならないという鬱規則。
いっその事 if 文をインデントしたら?
if( hoge ) {
func1();
func2();
....
}
逆転の発想だな
新しすぎて誰もついてこれないだろw
126 :
123:2008/08/21(木) 01:41:12
>>124, 125
ところが15年程前に見たこと有るんだよな
FORTRAN のソースなんだが、部分的に
>>123 の様なインデントだったんだ(IF と END_IF がインデント)
当時は理由が全く判らなかったのだが
>>122 の様な理由があったのかもしれない
>>122 さすがに今時アホすぐる規則だな。
インデントの為の空白/タブの変更は変更とみなさないとすればいいのにね。
多くの差分ツールでそう言うオプションあるし。
128 :
122:2008/08/21(木) 23:21:35
そんな規則におとなしく従ってる君もどうかと思うけどな。
派遣さんとかならまだわかるけど。
>>129 俺のことに言及してくれるな。返答に困る。
ていうか従ってないからな?
派遣なら派遣らしく、嬉々として「修正行数」を稼げばいいのにねw
>>130 > ていうか従ってないからな?
改善提案もしないし、規則にも従わない。
派遣だとしても最低な奴ですね、わかります。
>>132 俺が未熟なのは認める。叩きたいのもわかる。しかしスレの空気を悪くするのはやめてくれ。
差分出てもレビュー時に一言入れて済ます人が多い。規約遵守する人が妙なインデントを残す。
結局何百人もの人がスルーする規約なので俺も右へならえ。
>>132のような行動力ない。
いやいや……それでもなんでも、規約がおかしいと思ったら意見ぐらい言うべき
規約を作ったのが社長で、「君、明日から来なくていいから。」
>>134 ですよね。結局俺も無意識のうちに仕事増やすまいとしてるんだな・・・。
俺「先輩、if文追加でインデントが変わるだけの部分ってテs」
先「当たり前じゃん」
俺「ですよね」
素質ねぇ orz
>>133 だったら素直に ROM ってろよ。
>>135 > 規約を作ったのが社長で、「君、明日から来なくていいから。」
どの道そんな社長のいる会社は先がないと思うんだが。
>>120,
>>122 if 文追加してると言うことはそのコードに入る条件変わってるんだから、
その部分をデバッグと言うかテストするのは当たり前だと思うが。
ifに入るかどうかだけじゃなくて、中のテスト済みもやり直すんだろ
だから、条件違うだからやり直すのは当たり前だろ。
どこまでやり直すのかという話はあるけど、インデント違うだけだから
テスト不要と言い切るのはちょっと問題だろ。
少なくともレビューは必要だと思う。
ましてやインデント変えてないからなんて言うのはそれ以前の話だが。
は?
だな。コードの事前条件がかわるのだから回帰テストするのが常識だと思われ。
条件式を逆にしてgotoすればインデントは変わらないんじゃ…
if( hoge ){
/* 既存処理 */
}
↓↓↓
if( !hoge ){
goto LABEL1;
}
/* 既存処理 */
LABEL1:
でもそういうところは「goto文は一切使用禁止」って規約もありそうだな。
そんなことするぐらいなら、変なインデントの方がまだマシ。
変なインデントはエディタのほうで何とかできる。
変なgotoはどうしようもない糞。
>>120 そこで、2インデント、1インデントに変更ですよw
最初にインデントを32文字単位ぐらいにしておけば多い日も安心
>>145 こんなの見たら
書いた奴捕まえてボコボコにするぞ
通報?
通報!24!通報!24!
10年くらい前からあるASP(vbscript)なんだが、
古いからフレームワーク何それ?なべた書きは仕方が無いにしても…
・ 大量にある似た処理を関数化、ループ処理してない
・ 配列皆無
・ 一回しか使わないsession、requestも全て変数に代入
・ その変数は全て最初に空文字列代入 (おまけに全てグローバル)
おかげで何千行('A`)
ついでに、インデント滅茶苦茶
154 :
仕様書無しさん:2008/09/05(金) 19:47:32
俺四半世紀ほどこの商売やってきたけど、いま動いてるコードの八割強は
捨てた方が世の中良くなるのはみんな知ってるとおり。
でももっと困るのは、主に業務系で九割ほどの書かない方がいいコードが
主に輸入されちゃってたりする事実。使う金もひとも大して変わらないんだけどさ。
スレタイが読めないほど知性が崩壊したおっさんの登場です。
> いま動いてるコードの八割強は捨てた方が世の中良くなるのはみんな知ってるとおり。
それは事実だが、かと言って書き直せばましになるかと言うと必ずしもそうでないのも
みんな知ってるとおり。
捨てて書き直してる間にシェアを奪われてそれっきりというパターンも多い。
これから書く動くかわからないコード<滅茶苦茶な内容でもとりあえず動いてるコード
いま動いてるコードもハードも十割を捨てた方が世の中良くなると思う
そのコードを書いた人を捨てたら?
>160
翌日、この世から「プログラマ」という職種が消えた
平和になるか北斗の拳の世界になるかどちらかだな
C#で
SQL書くときに
string str;
str = str + "hoge";
で数百行続いていた時・・・・
StringBuilderか せ・・せめて str += ""; で頼みたかった
気になって聞くと
VBとかでも使いまわせるようにこう書いているんだそうな…・・
VB6だとしても「+」じゃなく「&」だろう。
C#で、VBでの使い回しを考慮する意味がわからん。w
どっちにしろ置換で一括変換すりゃいいだけだろうに
>167
連結自体は有りでしょ。
SQLの途中をコメントアウトしたりとか便利なこともあるし。
>>163 その場合は、たぶん、SrringBuilderはいらない。
StringBuilderは、ループとかで、追加する回数が不定のときに使う。
>>170 特定の環境以外に移植される事がありえないなら移植性を気にする必要は皆無だね
でも例えばwebブラウザみたいなのだといろんなOSに移植される可能性があるから移植性を考慮する必要があるよね
他の言語に移すことまで考えてコーディングなんて必要ないだろ。
突き詰めるとこの世に複数の言語が存在する意味を否定してしまう事になるな
+= はマクロで単純に+に置き換え可能だから問題ないよ。
VBスクリプトのサンプルに FOREARCH使ったのがあったんだけど、
これをFOREARCHのないスクリプトに移す方法が分からなくて困った。
いやもちろん配列数分繰り返せばいいんだろうけど
COMオブジェクトが取ってきたリストを単体で取り出す方法が分からないんです。
僕がそれを知らなくて使えないだけなんだろうけど、
FOREACHなしに単体アクセスできないようなものがあるとしたら移植性は落ちることになるね。
っていうかとあるスクリプト言語でCHAR型の配列を作れなくてDLL呼べません・・・
移植性考慮してたらソースにSQL埋め込んだりしないだろ
SQL格納用DBとかが別途あって、そこから取得してくる訳ですね。
>173
バベルの塔でネ申の怒りを買っていなければ今頃こんな問題は……。
プログラマが信奉するのはハノイの塔だろ
そんで象牙の塔にこもる
ドルアーガの塔・・・?
遅レス
>>167 連結自体は
>>168の言うとおりのことと
VB.NETでも移植可能なように
VB側だとアンダースコア入れなきゃいけないのもあってのことみたい
>>169 まぁいまさらこんなちっぽけなコストのこと言っても仕方ないんだけど
String += "Hoge"
てインスタンスの作成が複数回入るからせめて数百回連結するくらいならStringbuilderのが効率いいかなと思って・・・
それとAppendLineでデバッグ時に解読しやすようになるかなってのも考慮に入れてたつもり
文字列結合繰り返しながら改行コード入れろと言われれば終わりだけどw
↓出力イメージ
SELECT
HOGE
,HAGE
FROM
DUAL
こんなかんじ
まぁどうでもいいかw
>>183 MSが、StringBuilderの使いどころを解説した文章があって、それには、
ただの連結では、使う必要ないって書いてあった。
ループの中で連結させるとか、連結の回数が固定されてないとき使えって。
ちょっとしたテストプログラムでも書いて実証してみるべきか
と言うだけ言ってやらない俺
>>184 そうなんだ、ちょっと気になるな
折角なのでもし残ってるならURL欲しい
>>185 ( ´゚д゚`)
>>187 サンクス
JAVAの例だったけどこれは・・・・
いい勉強になった ありがとう
確かに他の部分のコーディングやSQLの書き方次第で処理時間的に変わるところの方が大きいだろうし、可読性優先させた方がいいかもってこっちゃね
javaのStringBuilderって初期容量を指定して、その容量を超えないようにappendするのが最速ってどこかで見たけど…
もうこういう小手先テクニックを使うような時代じゃないのかもね。
ジャンルにはよるだろうけど
>>189 …当たり前だろうに。C++のコンテナだってそうだ。
>>191 ディクショナリとかコレクション系もそうじゃなかったっけ?
>>192 そ。Cで言えば、
1. 最初に必要な領域を malloc で確保。
2. 必要に応じて realloc を繰り返す。
で、「1. の方が早らしい」つってるようなもん。
そりゃあそうだろうと。
しかし、場合によってはコンパイラの最適化に身を任せると、最初に固定で割り振る
とかの芸当を見せてくれるから手動で事前に容量計算して割り当てるより更に早かった
りするから油断が出来ない。
という話でしょ。
そもそも SQL 発行の方がよほど時間がかかるのでそんなことをちまちま指摘する
暇あるならもっと他にやることあるだろと思う。
深いループ中で何百万回も呼ばれるなら
>>195 の言う通りだが。
103:初心者(東日本) :2008/09/14(日) 15:13:22.04 ID:8Pa2emDm0 [sage]
こーいうのやめてくんない
↓↓↓↓↓
func()
{
try
{
// とても重要な処理を行う
:
:
}
catch()
{
sleep(3000);
func();
}
}
無限ループって怖いねえ
まぁどっかでスタック使い果たすだろうけど
はなしはかわるけどさ、
無限ループって怖くね?
重要なことだから無限回言うかもしれません
俺クミコ屋さんだから、今まで作った製品全部無限ループ(w
ループ抜けちゃったらクレームだなw
念のためそのループの後ろには0番地へのジャンプ命令を置いてある。
空き領域をRST 00hで埋めたりとか
ヘヘヘヘヘヘヘヘヘヘヘヘヘ
ずっと小さな会社でオープン系の仕事やってて、
最近組み込みの会社に転職したんだけどさ。
・モジュールという名の数万行のソースファイル。
・関数の平均step数500オーバー。
・その中は if( a!=0 ) { … if( a==0 ) { … else { … if( a==0 ) { } } } } みたいなのがいっぱいで構成されている。
・標準関数使用禁止なのはいいとして、ライブラリが全く整理されていない。
memcpyの劣化(低速化、高容量化)関数がいっぱいw
・hogehoge[5] = 画面遷移を握る重要なパラメータ; みたいなのが盛り沢山。
・関数よりもexternで↑の値を参照。
・設計も糞も無いから少しいじると即デグレ。
入社面接でxmlとかumlとか出てきて少しはできるのかと期待してたらこんなもんでした。
でかい会社の方が技術的にアレってのはよくあること
にしてもひどい会社だなwww
まるで某会社の携帯電話開発の現場を見ているようだ。
なんで標準関数使用禁止とか多いんだろ?
組み込みは話にしか聞かなくてやったことないのでわからん・・・
インターフェース仕様が読めない/読む気がない奴が多い。
自分で書いた奴でないと信用しないという奴も多い。
strxxx memxxx sprintfなんか実際使えば便利なんだけどね。
xxprintf() は内部で malloc() してたりして遅くてメモリ食いすぎ
と言う過去のトラウマの影響と思われ。
まあ、小規模系だと今でも俺は使わないけど。
strxxx(), memxxx() を使わない理由はよくわからんな。
>209
標準関数を使うと、大抵の場合は使わないモジュールの分までリンク時にくっついて
きちゃうからでしょ。LSI-Cなんかはそこら辺を細かく切ってたりして小さくいけますよと
いうのをウリにしていた位で。
ソースコードの行数より、実際にROMに落ちたときのメモリ使用量とかをいかに
小さくするかというのがコストにダイレクトに跳ね返ってくるところで、LIBを
ドカンとくっつけられたらたまらんでそ?
組み込みっていうと SymbianOS しか経験がないけど
コンパイラが標準ライブラリをサポートしていない、というのもあるかもね。
例えば SymbianOS だと static 変数が使えなかったりするんだけど(今もまだ使えないのかな?)
確か、それはハードウェアの制限だって聞いたような。
そういう事情で、標準ライブラリを揃えるのが面倒くさい・・のかどうかは知らないけど
事情をすべて織り込んだ独自ライブラリの方が、制限の多いハードウェアを活かせるだろうし。
標準の strxxx は nil 終端が前提だから、何をするにもまず nil が見つかるまでバッファをなめる必要がある。
リソースに余裕のない場合は、やっぱりそういうのは避けたいんじゃなかろうか。
速度に悩んでた mozilla も、文字列の持ち方はかなり工夫してたよね。なんかいろいろと紆余曲折を経て。
いくら最近の携帯のリソースは潤沢になったと言っても、ユーザの欲求はまだまだそれを上回ってる。
今時、動画なんて当たり前。でもCPUにでっかいファンはつけられない。
常時「うぃーん」なんてファン音がしてる携帯、誰も買わないよね。漏れは買うけど。全裸で。
だから sprintf() 系ならまだわかるけど、memxxx() なんかまで目の敵にするのは、
ちょっとロートルすぎ。
そもそも
>>206 も
> memcpyの劣化(低速化、高容量化)関数がいっぱいw
~~~~~~~~~~
って書いてあるだろ。
すぎ、とか言われても、そういう文化なんだから、ケチ付けるなら、改革してきてくれよ。
お前ン所の文化なんか知らんがな、勝手に改革でも自滅でもしててくれ。
>>212 最適化で未使用なものは削除されたりしないの?
ライブラリとリンカ次第の面もあるけどさ、例えば標準関数の多くがglobalで参照
errnoを参照していると芋づるでつながってくっつけられたらたまらんでしょ? 全裸でも。
他にも、組み込みではあまり浮動小数点演算なんか用がないんだが、浮動小数点エミュなし
のライブラリが用意されていないとこれも太る原因で困る。
とか、いろいろ。
>>213 >SymbianOS だと static 変数が使えなかったり
そりゃDLL内部の話じゃないのか?
>それはハードウェアの制限だって
なんでやねん。
>>219 おお、ずばり、DLLの話だべ。SymbianOSの一般的なアプリってのはDLLの形だから。
てことは、ハードウェアの制限とか関係ないのかな?
いやでも ROM には static なものは書き込めないから、みたいな話だったんだけど。
あーもういろいろ忘れた。
でもとにかく、SymbianOSでは static 使ってるとビルドエラー。1回うっかりやらかして怒られた。
気合入れた組み込み系って、コンパイラから自前で調整しなきゃいけなかったりするんでそ。
SymbianOSだとgccをベースにして、なんか細工してたりするんじゃね。
221 :
220:2008/09/23(火) 13:48:12
って勢いで書いちゃったけど、もともとの >206 は
> ・標準関数使用禁止なのはいいとして
あー、標準関数がねーぞゴルァと愚痴ってたんじゃないのね・・
無いなら無いで、同等の効率のライブラリを寄越せよ、と。
失礼しますた・・
> いやでも ROM には static なものは書き込めないから、みたいな話だったんだけど。
普通は、スタートアップルーチンが ROM から RAM にコピーするが、組み込みでそこを
サボってる奴は見たことある。
ただし、static 禁止じゃなくて、「使ってもいいけど初期値は保証しないよ。」って
言うスタンスだった。
223 :
206:2008/09/23(火) 21:53:49
文章力低くてスマン(;´ρ`)
プログラムの書き方というか、方針自体は大して意義無いんだ。
16bitマイコン(OS無し)なので、まぁ色々と事情があったとは思う。
ただ、その制約の中で10年間以上続けた成果が、
前述の無駄なROMの使用方法だとか、
不具合だらけのスパゲッティコードとか、
当然のデスマで労基に突っ込まれたりとか。(入社前だけど)
まぁ、こんな状態で長くいたら病気になりそうだし、
何より新人がかわいそうだから自爆覚悟で改革してみるつもり。
ガンガレ
小数点のある金額計算でfloat使わないでください
桁落ちしてるのにきづいてください おねがいします。
あるある('A`)
小数部と整数部と分けて変数を設定するのはいいよ
でもなんで文字列形なんだよ。COBOLでもないのに。
>>226 >小数部と整数部と分けて変数を設定するのはいいよ
いいのか?
「まだ」いいよ、って意味じゃない?
>>225 小数がなくてもダメだろ、jk。w
floatの有効桁の相場を知るがよい。
とあるゲームのスコアが40億でカウンターストップしたのだが
そのスレで桁数もっと用意しとけよという流れの中、唐突にdouble型を使うのが定石とか力説しだした自称プログラマを思い出した
>>229 小数がなければ使っていいとは書いてない。
そう読めなくもないけど相当意地悪だと思う。
>>230 カウンターストップしたということは仕様ってことですな。
>>231 > 小数がなければ使っていいとは書いてない。
そう読まれてもしょうがない、と言うかそう言うツッコミされるのは当然。
小数の有無に関係なく使っちゃいけないなら
「金額計算でfloat使わないでください」って書けばいいだけ。
なんという揚げ足取り・・・
>>225は「少数が無いならfloat使う意味が無い」という前提で言ってるんだろ。
>226
あのさー
旧VBで
変数はString型で宣言してるのに
計算は全部浮動小数点でやって格納してるという
凄まじいソースが手元にあるんだが……
なんだろうね、最早コボラの所行とも思えない。下手にPerlでも囓ったか?
>>234 いや、君がどう言う前提を置いて解釈してもいいけど、世間はそんなに
都合よく解釈してくれないよ。
>>235 なんかの勘違い君なんだろうね。
Perl とかと混同してる奴なら、型指定なし (=Variant) でやると思う。
コボラーだと、単位円の項目に20桁とか設定するのが関の山だな。
以前メンテ任された30000行くらいのC++のソース。
読んでるとやたらgotoが目につくので、ふと思い立って"goto"でgrepしてみた。
1000個以上引っかかった。
その場で転職サイトに会員登録した。
今は新しい会社で幸せに暮らしている。
使い方にもよるが30行にひとつとは穏やかじゃないな
>>238 PHP5.3にはGOTO文が「導入」されたんだぜ?
何故いまさら・・・?
>>240 エラー発生時に関数の最後に飛んでエラー処理をする理路整然な
使い方ならいいけど、縦横無尽に飛びまくってたら辞めたくもなるわなw
>>234 金額計算なのに、小数以下があるからってfloatを
使わないでください。
と書けばよかったんだよ。
>>241 PHPユーザは素人から玄人まで結構な人数がいるからな。
新人とかがgotoを使いだすと・・・
バカとGOTOは使いよう
・馬鹿とはさみは使いよう
・馬鹿にはさみは使わすな
要は後藤さんにまかせろ、と。
後藤の口から「こいつは一仕事だぜ」と独り言が洩れた。
>>242 そうすると、「floatの端数落ちして困るのは金額計算だけじゃないぞ」とか言い出す馬鹿が出てくるぞ。
「じゃあ勝手に全部挙げとけよ、馬鹿。」って返せばいいだけ。
>・馬鹿にはさみは使わすな
はじめて聞いたのでぐぐってみたら、多数ヒットして驚いた。
・バカとハサミは使いよう
と
・キチガイに刃物
が
ごっちゃになってそうだな。
こんなもんでごっちゃになると思うのは君だけかと
>>250 「馬鹿にはさみは使わすな」というフレーズそのものでヒットしているのは一件しかないじゃん
「使わすな」じゃなくて「使わせるな」じゃないか、と同でもいいことに突っ込んでみる
確かにはさみは刃物だしなあ。
例外処理の為に使うgotoは良いgotoなんだよって死んだばーちゃんが言ってた
俺はgoto使いたくなるなんて関数でかすぎじゃないか派
そして回らないループとbreak脱出
もしくはswitchと制御変数
>>255 初心者は何が例外処理がよくわかってないから、そんなこと教えちゃダメ。
gotoを乱発するプログラマにコーディング基準書読み直せって説教したら
関数全体をtry〜catch(...)で括って、gotoの代わりにthrow -1とか書き始めた。
それ、やってること本質的にgotoと変わらんから。
発想の本質が変わらないならそーなるだろ
その位のことがわからないほうがおかしい
定数を使うなという規約があるのか、
#define NUM_01 1
みたいなのが10くらい並んでいるソースを吐く害虫がいた。
一人だけかと思ったら、その会社全員使っていた。
>>262 定数をマクロ定義するのって、Cでは普通にやることだけど。何が問題?
>>263 ↓こういうことだろ。莫迦が書くコードの典型。
#define NUM_01 1
#define NUM_02 2
#define NUM_03 3
#define NUM_04 4
#define NUM_05 5
#define NUM_06 6
#define NUM_07 7
#define NUM_08 8
#define NUM_09 9
#define NUM_10 10
そして、ある箇所で「引数が1から2に変更になりました」ってことになると
#define NUM_01 2
に書き換えるのが大馬鹿
なぜ記号定数にするのかということを理解してないからそうなる
>>260 > それ、やってること本質的にgotoと変わらんから。
いや、try〜catch() は、飛び先が限定されるから闇雲 goto 乱発より相当ましだよ。
ただ大抵そう言う奴はそれだけではどうにもならなくなって、フラグ使ってゴニョ
ゴニョしてわけわかめのソースができちゃうことが多いから、よく見とかないと危険
だけど。
フラグってのもgotoやマジックナンバーと並ぶ害悪だよな。
もちろん正しく使えば問題はないんだろうが
本当にフラグが必要な場面ってそう多くはないと思うし
デバッグ時に場当たり的にフラグ作って逃げる、みたいなのを
繰り返してフラグをどんどん増殖させる奴って結構いるから困る。
用途不明のフラグだらけのソースの面倒見るくらいなら
gotoの方がまだましだよ・・・。
>>262 それって、定数じゃなくてリテラルと呼ぶんだよ。
>>268 > 用途不明のフラグだらけのソースの面倒見るくらいなら
> gotoの方がまだましだよ・・・。
でも、意味不明フラグと闇雲 goto って大体セットででて
くる...。
>>269 はいはい、正しい指摘できてよかったねぇ。
満足したら巣に帰ってくれないかなぁ。
Cで定数と言えば、定数マクロかconst修飾された変数だろ・・・
123 は、定数じゃないと?
人と会話できてる?
>>272 ひょっとしてお前、先輩に「ここの123ってリテラル、定数定義しとけ」と言われて
> 123 は、定数じゃないと?
とか答えるのか?
人と会話できてる?
正式な定義と普通の会話の使い分けもできないの?
やっぱり、人と会話するの難しそうな人だね。
先ず「定数」を well-defined にしろ無能共。
確かに
>>272は正式な定義と普通の会話の使い分けもできてないな。
>>276 どこがどうできてないか具体的に指摘しなよ。
それとも、君にとってはそれが普通の会話なの?
もしかして毎日辞書引きながら会話する系の人?
普通に
正式な定義=123も定数
普通の会話=定数定義といえば#defineやconstのこと
ってこと以外に考えられる?
粘着にエサやるな、ヴォケ
あー!もう訳が分からん!揚げ足取りの誰かが作ったバグ(
>>280)のせいでな!
>>281 > 123 は、定数じゃないと?
====
墓穴乙。
確かに
>>284は正式な定義と普通の会話の使い分けもできてないな。
下線ぐらいズレないようにひけよ低能
このスレおもしろーい
| |/ノ二__‐──ァ ヽニニ二二二ヾ } ,'⌒ヽ
/⌒!| =彳o。ト ̄ヽ '´ !o_シ`ヾ | i/ ヽ ! おケツを…掘った?
! ハ!| ー─ ' i ! `' '' " ||ヽ l |
うほっ
汚いスレだなぁ
2ちゃんねるをやめたくなった
やめれば?
しかしやめると生活が・・
シャッキリしてしまうな。
健康的になってしまう
>>271とは言葉の定義のズレやらなんやらを補正しながら会話できる
>>272はそういう補正をやらないみたいなので怖くて会話できない
>>271は多分
「ここの123ってリテラル、定数にして」
って言い方するんだろうけど、これで意味汲み取るなり
定数の意味聞くなりして会話できるよな
>>299 某H社のプログラマは定義のズレが激しすぎて補正能力が高くないと仕事できん
しかしこっちがイミフなこと言ってしまうと
>>272のようなきっつい切り返しも待っている
はぁ・・・月曜日がやってくるぜ・・・
まあマクロ定義は変だと思うけど意味解釈しないエディタで検索する場合は絞り込めるので使える。
某ソフトでバージョン番号を定義なしの埋め込みにされてたんだけど
そのおかげでデータの追加が行われるたびにデータ付加前と後の2つのデータができる。
ソフト業界ではこれで会社がひとつに絞り込まれるような気がするがまあいい。
これをたとえマクロ定義してあったとしてもパッチ当てないといけないことに変わりはないが、
versionって単語でプロジェクト内検索で一発で見つかるのと、
見当をつけてソース片っ端から探すのとじゃえらい違いだ。
まあ、データ作るほうがフォーマット互換性を保障してくれないクソ野郎だからまじめな人間はエラーではじくしかないんだよな。
んで、「決め打ちで」って指示を出したら判定部分に数字打ち込むし。
つまり仕様の指示を出す人間とコーディングする人間の間に、
ソースレベルで設計できる人間が必要なんだ。
設計は仕様定義とソースレベル定義とかっちり分けて考えないといけない。
>>299 >
>>272はそういう補正をやらないみたいなので怖くて会話できない
自称エスパー乙。
ついでに、
>>301 が何を言ってるのか翻訳しといてくれ。
仕様の指示を出す人間=SE
コーディングする人間=コーダ
ソースレベルで設計できる人間=プログラマ
>>305 プログラマがみんなソースレベルで設計できるんだったらJavaで手続き型だの
COBOLもどきだのやらないと思います。
>>305 > 仕様の指示を出す人間=SE
ダウト。仕様を決定する権限のあるSEなんて極少数。
ほとんどは降りてきた仕様から概略設計/詳細設計するだけ。
>308
だから「指示」なんじゃまいか?
自分では決めてないが、上から来たものを下に受け流す、と
SEは技術に口出さず客とのプロキシになってくれればそれでいい。
プログラマから叩き上げのSEならともかく、世の中のSEって大半が
最初からSEとして新卒採用された連中だろ。
場数を踏んだプログラマよりいい設計ができるとは思えない。
SE:客との折衝、要件定義、人・物・金の管理、事務処理
PG:設計、実装、テスト
ちょうどうちの会社がこんな感じなんだけど
個人的にはこういう分担が一番仕事しやすいかな。
技術的な決定権はコード書く人間に持たせないと駄目。
PG上がりのSEが多くなることを切に願う
営業もだけどさ・・・・
>>311 問題は、実態はPG上がりではなく、PG崩れのSEや営業が多いということ。
>>310 いいなあ・・・
うちのとこだとこうだ
SE:人・物・金の管理、事務処理
PG:客との折衝、要件定義、設計、実装、テスト
うちの場合、
SE: スポ新を読む
PG:人・物・金の管理、事務処理、客との折衝、要件定義、設計、実装、テスト
スレタイとは逆になっちゃうけど
// ミドルウェアのバグを回避するためここで一旦0を代入
的なコメントを書いておくと「消せ!」って言われる会社ってどうよ?
辞めとけ
>>310-314 コピペだが...↓
プログラマーの格言 66(盗作多し)
プログラマーに必要なスキルは、交渉・スケジュール管理・業務分析・提案・設計・言語・構築・保守・運用。
SEに必要な能力は、これから言語・構築・保守・運用を引く。
マネージャーに必要な能力は、さらに業務分析・提案・設計を引く。
営業に必要な能力は、さらにスケジュール管理を引く。
ここ掘れワンワン
∧_ ∧
(・∀・* )
(⊃⌒*⌒⊂)
/__ノ''''ヽ__)
>318
おとこわりだ
>>318 こんなのがソースに書かれてたら、会社を辞めたくもなるよな。
いやべつに
単なる変数の初期化じゃないのか
むしろオワットル
「俺の肛門も初期化されそうです」
『既出荷製品で問題なく動いている』とご自慢のプログラムに
こんなコードがあったこと。
上位バイトの初期化漏れで見事不具合を出していた。
unsigned long hoge;
(unsigned short)hoge = xxx;
コンパイル通らんだろそれ
思いつきなのか
思い出せてないのか
*(unsigned short *)&hoge = xxx;
だろう、普通。いや普通はそんなバカやらんか。
警告が出ると思うが、無視してたんだろうなあ
警告?出るか?
(unsigned short&)hoge = xxx;
じゃないの?
C++の参照型。
これもエラーか?
いやー、最近はPerlばっかりなもんで。orz
331 :
325:2008/10/29(水) 23:14:19
>>326-330 Cのソースをプリコンパイル済みヘッダ使わなきゃ
VC9でもコンパイル通るし、警告も出ない。
ただ実際やってみると
---
unsigned long hoge;
(unsigned short)hoge = 0x1234;
---
実行結果はDebugモードで hoge == 0xCCCC1234 な感じ。
16bitの世界のソースを何も考えずに移植したんだと。
>>331 代入の左辺のキャストはC99あたりで禁止になったんじゃないかな?
たしかgccがその辺の挙動を変えて、Linuxのカーネルソースの修正がとかいう話があった。
左辺値のキャストとか馬鹿かと思うけど右辺でそれぞれキャストするよりいいのかなと思ったけど
やっぱり全体をキャストできるんだから左辺値をキャストする奴は馬鹿だな。
そしてLinuxを書いてるのはそのレベル。
実際に見もしないで貶してるんだと思うけど、Linuxのコードは相当綺麗な方だよ
うん見てないけど、
Linux初期のコードは素人が書きなぐったようなものだったって最近2ちゃんねるで見た。
過去はこうだったって殴り書きだけを拠り所に全体を評価、か。
相当馬鹿なんだな、お前。
Cのソースの読みやすさには、初心者に読みやすいソースと、玄人に読みやすいソースがある。
Linuxは主に初心者に読みやすいソースだし、BSD系はどちらかと言うと玄人に読みやすいソース。
>>337 ああ、なんか分かる。
引数が多いWindowsプログラム最初に見たとき、引数ごとに改行してさらに引数ごとにコメント入れないとさっぱり分からんかった。
ん?
左辺値をキャスト出来る言語仕様にしたのは
どんな使い方を想定してるのだろう?
構造体の代入とか
構造体現物のキャストはできんでしょう
できる処理系あったっけ?俺の勉強不足?
int hoge = 0;
(short)hoge = 0xFFFF;
とかやったら
hoge = 0xFFFF0000; 又は
hoge = 0x0000FFFF; になるんだっけ?
前者になる処理系なら使い道有るかも知れんけどあまりにトリッキーだし危険だな
上読み直したら
>>327 のやりかたで構造体のキャスト代入できるわ
失礼しました
疲れてるから寝ます
左辺値のキャストキモイよー
(FARPROC&)はよくやる
左辺値キャストの本来意図した使い道はよくわからんが、
linux kernel で使われた例を見てみると、
ハードウェアとのI/O等でベタなバイト列をCの型や構造体として変換・扱いたい場合とかに
型をより明示したいという意図で使われたように思えるね。
ttp://search.luky.org/ML/linux-kernel.2004/msg58563.html 例えばこの辺とかも、まあ書いた人の気持ちはわからんでもないかなー、ぐらいは思う。
- (adpt_hba*)(host->hostdata[0]) = pHba;
+ host->hostdata[0] = (unsigned long)pHba;
この辺は元は一行だったのが三行で書き直さなきゃいけなくなってるし。
- *((u16*)buf)++ = le16_to_cpu(inw(NE_BASE + NE_DATAPORT));
>>343 >>327 のやりかたは構造体現物のキャストでも左辺値キャストでもないでしょ。
まあ本題ではないけど。
8085で、こういうのはやったな。これも左辺キャストになるのかな。
/* strcpy(xxbuf+xxen,"\n"); ** 以下に最適化 */
*(int*)(xxbuf+xxlen) = '\n'; /* <LF>を付加 */
H8系ならアウトだけど、8085だとうまくいく(w
いやそれは
*(int*)(xxbuf+xxlen)
が左辺値だから
左辺値キャストはされていない。
ヌル終端を一緒に書き込んでるのか
だったらまだ
xxbuf[xxlen] = '\n';
xxbuf[xxlen+1] = '\0';
のほうがマシな気がするが
>>346 を見るに、行数を気にする人もいるのかね?
>この辺は元は一行だったのが三行で書き直さなきゃいけなくなってるし。
>- *((u16*)buf)++ = le16_to_cpu(inw(NE_BASE + NE_DATAPORT));
bufにu16サイズ分書き込むだけなら気にしないんだが
++はキモいなー
350 :
347:2008/12/22(月) 17:36:56
>>349前半 それだとアドレス計算が2度されるし、DEregにsetした16bit値をストアする命令が
出ないので、347のほうが速いです。 なにせ3MHzの85(w
ロートル乙
速度が気になるならアセンブリで書け、っつーこった。
1秒毎に4.8Kbitの電文80バイトぐらい。コンマで区切られたパラメータの並べ替えをするのに
strxxxを使ったら間に合わなかったので、引数のHL,DEをpush/popで保持しながら自前movstr()
を呼び出す部分を_asm_c("ASM文"); で埋め込んで書いたことはある。
前任者が書いたASMより俺が書いたcのほうが軽かったこともある。
今でも、重さが気になるときはASMコード吐かせて確認してる。
354 :
346:2008/12/25(木) 13:46:03
>>349 後半
単なる行数を気にしてるのではなくて、
そのためだけにわざわざ一時変数を用意しなきゃいけなくなっていて、
コードのシンプルさが失われちゃってるよねってこと。
もし元々 buf が u16*型だったとしたら(キャスト無しで)ごく自然なコードなんだしさ。
むしろ incb と incw をちゃんと意識している感じが
非常に「高級アセンブラ」らしい使い方だなあ、と
俺はなるほどと感心したくらいだが。
355 :
仕様書無しさん:2009/01/05(月) 21:19:38
2年前に会社辞めた奴の残したコード
} catch(Exception e) {
Exception x = new Exception();
x.initCause(e);
e.initCause(x);
throw x;
}
俺はクミコ系なので、スローとキャッチの意味は推測なのだが、
その残したコードは恨みか愉快犯か故意犯か、どれかに思えるな。
>>355 これ、試しに書いてみたら、
stackTrace出すと、stackOverflowでこけるな
initCauseの時点では問題なさげだけど、参照をお互いに保持してるから、
printStackTrace()とかを呼ぶと、問題になるね
意図せずにこんなコード書かないだろうから、
遠回しな悪意の表明だろうなぁw
x.initCause(e); // ちくしょう…
e.initCause(x); // ちくしょう…
throw x; // ちくしょぉぉぉぉぉぉぉぉ!!
に見えた。
>>347 コードのどこにも書いていない '\0' の代入を、挙動を追いながら想像しろって?
最 悪 な コ ー ド じ ゃ ん 。
「プログラム書法(共立出版)」を最初から最後まで全部読め。速くするのはそれからだ。
業者乙
今ならプログラミング作法じゃないの。おっさん乙
>>361 「プログラム書法」に必要十分なことは書いてあるから、類似のものなど読まなくていい。
おまえら若者が古いという理由だけでこういう良い本を読まないのは哀れにも愚かにも思える。
「ビートルズやツェッペリンなんか聴いても仕方ない」と言っている奴らとまったく同じだ。
そうやって古き良き時代にしがみつくからだめなんだよ
>363
「古きよき時代にしがみつく」って日本語の意味を
ちゃんと理解してから出直してこい
>>363 そういうのは「反論」じゃなくて「ただの減らず口」って言うんだよ。覚えとけ。
反論したいなら、何か相手をうならせるようなことを言ってみろ。
つぎで、うなってください
∈(゚◎゚)∋ウナー
はいはい、類似なら書店で手に入るものでいいでしょ
>>362 > 「ビートルズやツェッペリンなんか聴いても仕方ない」と言っている奴らとまったく同じだ。
それとこれとは話が違うだろと思うビーヲタの俺。
見やすいのが一番だぜ
371 :
347:2009/01/26(月) 04:08:37
プログラム書法なら、出てすぐにイヤってほど読んだよ。チームでする仕事にはもちろんやらない。
俺以外に誰も保守する人が居ない状況での*遊び*だからやってるの。
>>359 >コードのどこにも書いていない
Cのスタンスでは
「態々 int* にキャストしてるところで気づかない奴が間抜け」
まして
>>347 がいつの時代だと思ってる。
作法も糞もあるか。
>>371 遊んじゃダメだろ…
暗黙の了解の上で仕事してちゃ引き継げるわけがないだろう。
374 :
371:2009/01/27(火) 15:34:29
いつ引き継いでくれと言われてもいいように、個々のVerの他に 「このシステムの保守は
どんな仕事でハードの概要はこうでソフトの作りはこうで・・・」 って文書用意してるよ。
でも一度もそんな話出ない。他の害虫使ったこともあるがすぐ俺に戻ってきたし。
俺がよっぽど安いのかも。
本人は気付かないんだろう たぶん
static char *price_str[] = {
"\\0", ←A
"\\1",
"\\2",
...
"\\99,998",
"\\99,999",
"\\100,000" ←B
};
strcpy(buf, price_str[price]);
Aの行番号が486…Bが100485…間はABも含めてちょうど100,000行…
やはり1行足りぬ、うらめしや…
「
>>376くん、カンマの位置の打ち間違いが無いかどうか、目視確認してくれたまえ。」
それ全部取っ払って、
if( price > 1000 )
sprintf(buf,"\\%d,%03d",price/1000,price%1000);
else
sprintf(buf,"\\%d",price); じゃいかんのか?
>>372 > >コードのどこにも書いていない
> Cのスタンスでは
> 「態々 int* にキャストしてるところで気づかない奴が間抜け」
エンディアンだけでなく、intのバイト数にも依存している事実に気付け。
余分に入っているだけなら問題無いっしょ。
>>379 >エンディアンだけでなく、intのバイト数にも依存している事実に気付け。
んなもん当たり前だろうに。
なんで気付いてないと思ったんだ?
頭おかしいの?
382 :
347:2009/01/29(木) 14:33:00
別に釣りでも火に油まくつもりでもなかったのだが、なんか後引いて申し訳ない(m_ _m)
でも俺、製品で遊びはよくやるんだよね。大昔、現金輸送車の監視コードを8085で書いたとき
いざ!ってときのブザーの鳴動リズムを・・・−−−・・・にしたらこれが大受け(w
別のブツで警告の種別を3種類のタイマトーンで知らせるときに、原案は無意味な3音の組合わせ
だったので、楽典(らくてんと読まないように)を調べて♪レミソ・ミソレ・ソミレ に聞こえる分周比
を設定したらこれも受けて、そのまま製品になった(w
扱いに困るエンジニアだな
>>376 >>378に類する処理でFAな気もするが、ほんとにそんなデータが必要なら、
perl -e 'for (0..100000) { 1 while s/(.*¥d)(¥d¥d¥d)/¥1,¥2/g; print qq("¥¥$_",¥n) }'
とでもやって出力とそっくり置き換えてしまえ。
ウチの会社、文字コード変換全部テーブル使ってるの有ったよ。
JISとSJISとUTF8、UTF16で数万stepだた。
区点コード系どうし(JIS<->SJISとか)
Unicodeのエンコード
それぞれ身内での相互変換は計算でできるけど、
グループをまたがった変換は表に頼るしかないんじゃなかったっけ?
nkf がコメント等含めて全部で約二千行
jis sjis euc 対応だったかな
>>389 殆どバラバラだからね。
で、Unicode Consortium のバグ入り変換表を参考にしちゃって
〜(波ダッシュ)→~(チルダ)に変換されちゃうという悲劇。
数万ステップって事は漢字一文字の文字列配列を定義したのか?
ステップも無駄だがメモリも1.5倍使うな
>>392 >漢字一文字の文字列配列を定義したのか?
なんでそうなる。
>>394 short 配列なら数万ステップにならないんじゃね?
訂正:メモリも1.5倍→3.5倍
>>394 うん。やっぱり君が何考えてるかわからない♪
X0208+X0212で何文字あると思ってるんだろう。
しかも、Unicode への変換・逆変換が必要だってのに。
>>395 漢字が正確に何文字有るか知らんけど2^16以上ではないだろ
読みやすさを考えれて一行に16個ずつ並べれば最多で4096行
テーブル2セットで数万ステップにはならんだろ?
それにこのネタは
>>376 から派生してるんだから漢字の文字列テーブルが有ったと考えるのが自然じゃね?
どうでもいいんだけど
>396
>一行に16個ずつ並べれば
決め付け(・∀・)イクナイ!
>有ったと考えるのが自然じゃね?
思わないけど
どうでもいいというかどうとでも取れると言うか
まぁ仕事だったら突っ込みどころだけど
347のコードをH8Sに移植してみた。例の部分はもちろんstrcpy(xxbuf+xxen,"\n"); に直すはめに。
8bit 3MHz→16bit 33MHzだから、もういくらでも無駄できる(w
エンディアンの左右以外にも違いがあったよ。charは85ではunsignedで、H8ではsignedだから
80h以上の値だと比較する時に符号拡張した負の16bit値と008xhが比較される。
85的な動作を期待するためには_UBYTE型を使わなきゃいけないんだが、char[]の替わりに
_UBYTE[]を使うと、その配列をstrxxxやsprintfの引数に使うと Argument mismatch の
Warning 対象になるのね。そういう箇所ではみんな(char*)のキャストつけて呼ばなきゃいけない。
typedefine.h と iodefine.h をincludeするだけではすまなくて、隅々まで再点検する事になった(w
401 :
仕様書無しさん:2009/04/06(月) 19:36:26
今さっき本番サーバーで見つけたシェル。
zip.sh
#!/bin/sh
SHELL=/bin/tcsh
export SHELL
cd /hoge/applog/
/usr/bin/tar cvf /hoge/dblog/DBLog.zip $1*.log
・・・前の会社の担当者出て来い(゚Д゚#) ゴルァ!!!!
テストしてないだろ以前に、書いてて判るだろが!!!
>>401 正しい拡張子は .zip じゃなくて .tar だよな。当然。
拡張子なんて飾りです
そのまえに
#!/bin/sh
こう書いておいて
SHELL=/bin/tcsh
export SHELL
こうはないだろって思うのだ
あり
出口が山ほどある関数がてんこもりのコードを引き継ぎました。
破棄してリファクタした方が早いよう。
>>402 仕様書に「zipでくれ」って書いてあったのかも
シェルスクリプトの事をシェルと略している時点で
>>401も似たようなもんだ
略すならスクリプトといえ
それにこのスクリプト、ちゃんと動くだろ
usage: zip.sh <prefix>
/hoge/applog/<prefix>*.log を /hoge/dblog/DBLog.zip に tar 形式でアーカイブします
>>404 子プロセスの環境を変えたかったんだろ。
H8S ルネサスのコンパイラで、_UBYTE &= 0x7F; に対して precision lost のwarningが出るのね。
bit0〜6のoffには出ない。しょうがなくて_UBYTE = (_UBYTE)(左の変数 & 0x7F); とか書くんだ。
特に変な書式じゃないのに怒られるみたいで、なんかヤだな(w
ごめん、書き込みミスった。
>>402, 407
今、あってないようなものな仕様書見た。
>指定された日付のDB更新結果ログを圧縮してダウンロード
zip でくれ、とは書いてなかったよ! でもtarって圧(ry
むしろヘッダ分大きくなるな。
連結されるからディスクの使用単位毎の余りが無くなって実使用容量は少しは減るかもよ。
アーナルほど。
圧縮できないtarなんてまだあるのか。
圧縮すると一部破損しただけで復号できなくなる範囲が大きいから
好意的に解釈して障害対策だな
>>411 論理演算の結果がintになるからって理由かも?
つか、こんなshわざわざ書くなら、logrotateでも使えばいいじゃまいか
>>419 それだとbit6〜bit0のoffにwarningが出ないことは説明できないじゃん。
8bitの値が7bitの値になるのだから、precision lost なのは確かなんだが。
>421
0x80 が符号拡張されて 0xFF80 になる、って話じゃないの?
NaN
_UBYTE &= 0x7Fu
とか?
>>425 今試してみた。0x7FuはOKだったけど、maskを#defineで書いてるんで、#define XX 0x80;
で _UBYTE &= ~XX; はダメ。 _UBYTE &= (_UBYTE)~XX; だとOKでした。 ありがとうございます。
ヘッダファイルのほうにも#define XX (_UBYTE)0x01 のように明示キャストを付けました。
出る機械語は特に変わりません。
たしか H8S のやつはデフォルトで char 同士の演算を整数格上げなしで char のまま
演算するっていう独自仕様だった気がする。
標準では int より小さい型は演算前に必ず int に格上げされる。
標準に合わせるためになんかオプション足してたような。
これHewのコンパイラの鳥説に書いてなかったか?
>>428 今見てるけど、どこに書かれてるか見つからない。言語仕様の章にはcharはsignedだと
しか書いてないし、オプションの所にもそれっぽい指定はないし。
プログラミングの章のどこかかな・・・
430 :
仕様書無しさん:2009/04/11(土) 06:52:47
private unsafe void FerguuenSamtzongeImage(ImagePtr pimgInStff, ImagePtr pimgEzStff){
int fezstraag = pimgInStff.Stride;
int kup_enn = -this.m_iRaad;
int arde_enn = this.m_iRaad;
byte* p_in = (byte*)pimgInStff.Scan0;
byte* p_eiz = (byte*)pimgEzStff.Scan0;
for(int y = kup_enn; y <= arde_enn; y++){
int hoegt = (this.m_poZentrum.Y + y) * fezstraag;
int pos_raad = (int)Math.Round(Math.Sqrt((kup_enn * kup_enn) - (y * y)));
int neg_raad = -pos_raad;
for(int x = neg_raad; x <= pos_raad; x++){
byte datum; byte ougten_nigburhijd = 0x00;
int org = (hoegt + 0) + ((this.m_poZentrum.X + x + 0) * 3);
int naw = (hoegt - 1) + ((this.m_poZentrum.X + x - 1) * 3);
int nrd = (hoegt - 1) + ((this.m_poZentrum.X + x + 0) * 3);
int nai = (hoegt - 1) + ((this.m_poZentrum.X + x + 1) * 3);
int wst = (hoegt + 0) + ((this.m_poZentrum.X + x - 1) * 3);
int ist = (hoegt + 0) + ((this.m_poZentrum.X + x + 1) * 3);
int saw = (hoegt + 1) + ((this.m_poZentrum.X + x - 1) * 3);
int sed = (hoegt + 1) + ((this.m_poZentrum.X + x + 0) * 3);
int sai = (hoegt + 1) + ((this.m_poZentrum.X + x + 1) * 3);
ougten_nigburhijd = (p_in[naw] & p_in[nrd] & p_in[nai] &
p_in[wst] & p_in[ist] &
p_in[saw] & p_in[sed] & p_in[sai]);
if(ougten_nigburhijd != 0xff){datum = 0x00;}
else{datum = 0xff;}
p_eiz[org + 0] = p_eiz[org + 1] = p_eiz[org + 2] = datum;
}
}
}
>>430 ドイツ語表記と英語表記が混じっているということはオランダ語のソース?
ドイツ語とオランダ語は少し分かるんだけどどっちでもないよ。
でもいかにもゲルマン系だよね。何語なんだろうね。。。でも
変数名の意味は類推でわかるとこもある。
二値画像とみなしてるデータの円の中をなめて収縮処理してる
んだね。処理対象ピクセルの8近傍を東西南北で名づけてるよう
な感じなんだけど。。。
/* おまじない */
/* おまじない2 */
>>433 なんか俺が保守したコードかと思った(w 回路図上はどっちが先でもいいという言葉を
信じて、TX_PLLの設定をRX_PLLの設定より先にしたらノイズ出まくり、おまじないでRXを先に
したらぴたりと止まった、って体験があるよ。
単に /*おまじない */ で済ませずに
/*
回路図上はどっちが先でもいいという言葉を信じて、
TX_PLLの設定をRX_PLLの設定より先にしたらノイズ出まくり、
おまじないでRXを先にしたらぴたりと止まった
*/
と書いておけば十分じゃね?
/*
シミュレーションでは問題無かったので私の責任ではありません
*/
437 :
434:2009/04/16(木) 18:07:46
直したコードには
>>435さんみたいなコメントをしっかり残しました。同志よありがとう。
組み込みとかだと結構おまじない的な経験則でないとどうにもならないことがある気がする
#defineマクロの末尾エスケープが一回しか処理されないコンパイラで数日繰り返し悩まされる羽目になったり…
タイマとIO方向の設定順序によってIO設定が無効化されたりとか…
// 石のマニュアルにはIPRKが載っているが、ioddefine.hにはIPRKが定義されていない。
// これは明らかにへうの不備だ。幸いこのレジスタはデフォのままで使えたので、
// 実際の被害は出なかった。
とかね・・・この手のコメント残すと、なんか愚痴っぽくなるな。
「なに」じゃなく「なぜ」を書くという観点で十分価値のあるコメント
>>433 アホPGは、その「おまじない」っていうコメントすら書いてないから困るw
いきなり意味不明の処理があって、
そこを触ると当然動きが変わるという。
>>440 おそらくハードウェアの不具合的な部分だろうから、
○○さんの指示でこういう風にやった
とか書いておくと、後々楽かもw
数年後に、なんでこんな変な事やってんだよー!って周りから攻められた時回避できるし。
>「おまじない」っていうコメントすら書いてないから困る
わざとだぉ
/* ボクがやっと見つけた正しく動く順序だ。書き換えることは許さない */
>>444 お疲れさんとは思うが
別に辞めたくはならんなぁ
冗談に見えるか、ちょっと壊れてるのかが大きな差かな?w
447 :
仕様書無しさん:2009/04/24(金) 07:04:14
phpの
なんだろ。 コメントアウトあり、なしで
挙動が代わるのがあった。
俺は解析していなくて、聞いただけだったが。
よくみつけたなと感心した。
/* ボタンクリック事件 */
450 :
仕様書無しさん:2009/04/26(日) 21:00:13
/* 整数型の変数iを宣言 */
int i;
/* 整数型の変数aを宣言 */
int a;
/* 整数型の変数aを0で初期化 */
a = 0;
/* 以下複雑になるので省略 */
for(i =0; i < param; i++) {
>>450 電車の中なのに吹いたじゃねーかwwwwwwwww
これはwwww
>>450 ちゃんと自己説明的なコードを書いているのにコメント要求された時に
ふてくされて書いた。今は反省している。
>>408 デグレードって表現を嫌ううちの試験部隊。
デグレードっていうと鼻で笑われて、"直し壊し"だろ?っていわれる。
同じ意味だと思っているが、試験部隊にはさからえない俺。。。
>>455 つーか、無理に出口を1つにまとめるために
無駄なフラグや変数を増やしているコードのほうが
ずっとイヤすぎるよな。
エラー以外で出口が複数あるのは関数分けが出来てない気がする。
>>457 if (foo()) return 1;
if (bar()) return 2;
return 3;
こんな関数ザラにあるだろ?こんなのも関数分けの問題なのか?
それとも、出口をひとつにするために int result とか用意しろって言うの?
何のために?
それくらいならいいんじゃね
何それ?量によるの?
結局「長い関数は関数分けができていない」ってだけじゃないの?
出口が1つだけの関数のほうがよほど珍しいだろ。
簡単な探索アルゴリズムでも大抵、目的物を発見した時と次の領域に進む時とでは
別のreturn文になることのほうが多いし、それが自然だ。
462 :
仕様書無しさん:2009/04/27(月) 13:32:09
俺ならリターン用の変数使う後者のやり方するけど
出口は複数可というのが、最近の王道だぞ。
文句を言っているのが、20年前にプログラム技法を習得して惰性でそのまんまの
おじさんなのか、あえてその王道が気に食わんと言っているのかしらんが。
if (foo()) goto RESULT_X;
return 0;
RESULT_X:;
return 1;
465 :
仕様書無しさん:2009/04/27(月) 15:47:13
フローチャート書くときに中ぬけとか書くやつは素人レベルだと思ってたけど
最近の王道とは世も末じゃ
まあ、何でも良いんだけどCode Completeくらい読みなよ。
ダイクストラ(というよりその半端な解説本)を未だに引きずってないでさ。
その年じゃコード規約を決める側だろう。部下が可哀相だ。
467 :
仕様書無しさん:2009/04/27(月) 16:58:40
throwの中ぬけはわかるがリターンはわからん。
リターンにしなきゃわかりにくいという。どんだけ一個のメソッドの図体でかくしてんだよ。
今どきフローチャート書くやつがシロートだろw
某家電系はまだやってるぞw
フローチャートって古いのか?ってマジ質問されたから。
20世紀なところだったな。2度度かかわりたくない。
>>467 処理を中断するときはその場で抜けたほうがいいと思う
それともいちいちフラグで管理するつもり?
作ってるものにもよるかなぁと思った。
けど、やっぱしその場で抜けたほうがいいのかな?
returnは1つだけって言うやつは
continueやbreakも使うなと言いそうだ
MISRA禍
でかいメソッドで出口が複数あると面倒なんだよねぇ
といっても、フラグ立ててもそれを追うのも大して変わらんのだが
出口一箇所にするためにフラグ立てて複雑になるようなソースな時点で
構造的にダメだろ・・・。
476 :
475:2009/04/27(月) 21:52:35
見やすくするためにリターン入れるようなのはOK。
if文がめちゃくちゃネストしてるような状態で
出口1箇所にするのはフラグいっぱいになるのでやだよー
だからリターンしたいよー
ってなソースが多いんだよな・・・。
>if文がめちゃくちゃネストしてるような状態で
>出口1箇所にするのはフラグいっぱいになるのでやだよー
これも見やすくするためじゃないの?
returnを検索して内容追うほうが好きかなー
return; が複数あること自体は全然OKだが
こういう馬鹿なのはやめてくれとは思う
void func() {
前処理();
if (!x) {
後処理1();
後処理2();
return;
}
if (!y) {
後処理1();
後処理2();
return;
}
〜延々と続くと思いねえ〜
本処理();
後処理1();
後処理2();
return;
}
挙げ句5つめぐらいでコピペし忘れてバグってるというオチ
ハードやってる側からすると出口一個の方が楽だなー。
監視場所が減るし、
シミュレーション見てて動きが何となく分かるから。
>>480 監視場所をCALLした次の行にすればいいだけじゃね?知らないけど。
ああ、CALLされた関数をちぇっくしたかったんですか。
そういう特定の事案は個々に考えれば良いだろうよ。
定本と言われている本くらい目を通して、物事を語れということだ。
フローチャートなんて、「人月の神話」でんなもん使うなと言われているのに。
「人月の神話」はようやく高水準言語が使われるようになったころ出てきたすごく古い本。
逆に言えば、フローチャートが意味をなすのは、ベタベタのアセンブラだということになる。
人間のための抽象化がなされた高級言語とは、相性が悪い。
フローチャートが書きづらいからreturn複数不可なんてのは、まったくもって本末転倒。
483 :
仕様書無しさん:2009/04/28(火) 08:42:19
出口複数理論だとcase文でもbreakで抜けるんじゃなくてreturnで抜けてそうだな。
return複数反対派はbreakもだめとかいいそうさんは
論点ずれすぎてなんもいえねえ
484 :
仕様書無しさん:2009/04/28(火) 08:50:39
そもそもひとつのメソッドで中ぬけする時ってどういう処理?
2重3重ループ中に中断するとき
>>484 とりあえず、実装パターン読んでから出直せ
サブルーチンの入り口や出口が一箇所ってのは、非構造化言語時代のお作法だろ。
出口や入り口がはっきりきまってなくて、gosubやcallで飛ぶ先が入り口になって、
returnのある場所がサブルーチンの終わる場所になってるような言語の。
>>488 それも違う。
ダイクストラ本には、確かにreturnは一つという言明がある。
それが、もはや(と言っても1990年代〜だが)オブソリュートだってこと。
つーか、本読めよ、本。
obsolete 旧式の
absolute 絶対的な
absolutely obsolete ってことか
>>486 共通化できるところを共通化しないこと、かと。
たとえば 後処理3() を追加しなければならなくなったときに、
全部の return の直前に追加していくつもりで、
一箇所コピペし忘れてました!ごめんなさいっ!
みたいなバカなことをやってるのをたまに見る。
>>486 俺も初見では気付かなかったが、
後処理1,2() って共通なんだぜ...
つまり、
void func() {
if (x && y ...) {
本処理();
}
後処理1();
後処理2();
}
495 :
仕様書無しさん:2009/04/28(火) 23:28:49
こうやってスパゲティができていくんですね
C言語ならローカル変数を使うけど、
アセンブラならグローバル変数の方が
楽だというのに近いかな。
>>473 MISRAは知らないけど、
PCアプリのために作った訳じゃないということだろうね。
>>483 WinProcはbreakしないでreturnするのがザラ
サブクラス化したらほぼ必須
この手の議論の万能回答:状況次第
関数が単一の仕事しかしないのであれば
どこで抜けようが同じ
ということかなあ
会社が単一の
いあなんでもないんだ
手続や関数、メソッドなどの正しさはユニットテスト(xUnit)で保証するもんじゃないの?
returnの個数なんて関係ないじゃん。
returnを無理矢理1つにまとめたソースなんて保守性最悪だからな。
データ依存や制御依存がグチャグチャ。
適当に分割すればいいじゃんよ。
ま、適当に書くとじゃんじゃんふくれますけどねー
>>501 何処をどう読んでんだか知らんが、
>正しさ
の話なんか誰もしてない。
goto論争並の不毛さだな。
ちなみにおれはreturnはいっこ派。
そう育てられたから仕方ない。
>>506 なぜそうなのかを考えないと駄目だろ。
意味を判らないでルールを振り回す人間が
老害になっていくんだろうな。
変数宣言は必ず先頭で。
gotoは絶対に使うな。
出口は必ず一つ。
型をつけるハンガリアン
509 :
仕様書無しさん:2009/04/29(水) 12:32:30
>>507 なぜそうなのかなんてどうでもいいだろ。
どうするのがいいのか。それが問題だ。
じゃあ、結論はとっくに出ている。
出口一つ論の大御所ダイクストラがその論を放棄しているんだから。
なぜ そうするのがいいかを理解して物事に取り組まないと応用がききませんよ?
構造化と出口一つは関係ないよね。
だってIF分岐って構造的にはGOTOと同じなんだから。
あれ?
>>511 なぜそうするのがいいと思う人がいるかなら理解してますが。
無理やり出口を一箇所にするくらいならこーやって関数を二重化してやんよ
前処理
ret = Func
IF 分岐 RETURN true
いろいろ
RETURN false
Fend
後処理
return ret
>>513 そういうこったな
returnやbreakの違いは
どこに処理を移すかの違いでしかない
関数内で関数が作れればどこでreturnしてもおk
いい加減「returnは一個」スレッドでもたててそっちでやってくれんかね
CodeCompleteでは、可読性を高めるための複数のreturn文の使用は推奨されているけどね。
returnは1個を厳密に守るなら、void関数内でのreturn文を使えなくすればいいのに。
最後の}にたどりつけば抜けるんだから。
VB6でのレコード初期化処理
For分処理に変えたら書いた本人からこんな書き方もあるんだって言われた
俺新人書いた奴VB10年選手ww
rec.Fields("field1") = ""
rec.Fields("field2") = ""
;
rec.Fields("field49") = ""
rec.Fields("field50") = ""
そういや他の奴もPerlでも配列が使えないとかいって
$A = 0
$AA = 0
$AAA = 0
とか変数作りまくって保守に苦労したなぁ
これでも"少数精鋭"だそうです
× 配列が使えない
○ 配列の使い方を知らない
>>518 だからVB厨って言われるんだなあ(しみじみ
521 :
仕様書無しさん:2009/04/29(水) 16:45:16
522 :
仕様書無しさん:2009/04/29(水) 19:49:51
>>518 × 配列の使い方を知らない
○ 配列の使い方が理解できなかった
配列理解できないのは、さすがにきついな
中国って
少人数=少数精鋭
それ以外の表現は聞いたことがない
表現じゃないだろ?
本人達は少数精鋭だと思ってるだけで
実情は少人数なだけという事実。
少人数だからこそ、少数精鋭に成るんだ
という意味を持たせたい。
という感じで昔やってたな。仕事じゃないけど
528 :
仕様書無しさん:2009/04/30(木) 00:10:19
>>527 ノアの箱舟に乗った奇特な人たちでおk?
むしろ、泥舟だけどな
回路設計するときは実配線しないといけないから return 一箇所のほうがいいと思うが
ソフトウェアの場合は物理配線がないから return 複数あってもいいと思う
出口が複数をreturnが複数にすり替えた奴は死ねよ
えっジャンプだったの?
日本語が弱い文章だから伝わんないよ〜
533 :
仕様書無しさん:2009/04/30(木) 18:33:09
ソフトウェアっていうか普通のプログラムでは出口とreturnは同じだよね。
現実にはENDはないとしても、CALLされた場所に必ず戻るわけで、
仮想的にENDに飛ぶと考えてもいい。
returnで行けない出口といえば、関数を超えたgotoとか
スタックをいじって自分自身の関数ポインタを書き換えるとか
そういう変態的なプログラムしかないよね。
return 以外の出口っていうと、例外のことかな?
と思ったけど、よく考えたら例外合わせて出口がひとつだと例外の使いようが無いな。
もう On Error Resume Next でいいよ('A`)
C#で全関数、全変数staticでグローバルなあのプロジェクトはあと何千年したら完成するんでせうね
537 :
仕様書無しさん:2009/04/30(木) 19:30:39
>>533 スタック弄って戻り先変えるのはわりとよくやる
パッチだから不可抗力なんでせう
pushとretだけでAPIを呼ぶのも結構楽しい。
スタックにSuspendThread積んでRETって結構便利じゃね?
>>534 ハンドリングすることでエラー処理が明示的になるじゃないか
例外の付加情報の伝達にも例外型が必要だし、戻り値を戻り値として使えるようにもなるし
pushpop
callret
スタックいじった時点で、言語の抽象化を踏み越えてるんだから、
出口が複数もへったくれもないだろ。頭が悪いやつだ。
extern山ほど.hをincludeするのと、使う変数だけを明示的にexternで書くのはどっちが好き?
俺はリーダビリティの点で後者をよく使うんだけど、会社っぽい仕事だと前者が多いみたい。
>>541 後者は絶対に駄目。
理由書くのめんどくせー。
後者が「ポータブル」だと思うのはなぜだ!???
自分が書いたextenが間違ってても、コンパイル(リンクじゃないよ)は出来ちゃうよね。
だから駄目。
そもそも Global Scope の大域変数は使わない。
いやーん、ばかーん、えくすたーん
>>544 俺には
>>541はリーダビリティと読めるのだが…
どの広域変数を操作してるか分りやすいって事だろう
>>541 後者がダメな理由は色々ある
・コピペミスが起きうる
・ヘッダファイルの意味が無い
・変更があったときにgrepしないと修正漏れが出る
・広域変数にアクセスしていることが、インクルード部分を抽出しても分らない
・使う広域変数が一部だけなら、使う部分だけ切り出す前に意味単位ごとにヘッダを切り分けるべき
他色々
だがそれ以前に広域変数によってたかってアクセスするような構造はスパゲッティの代表格なんでどの道アウト
549 :
541:2009/05/02(土) 01:37:11
ふむふむ・・・どれも尤もな理由ですね。 俺、小規模のクミコ屋なんで、
>だがそれ以前に広域変数によってたかって・・・ これを完全にクリヤしようと思うと
カプセル化とか、オブジェクト指向みたいな、えらく着膨れな実装になっちゃいますよね。
ROM/RAMの制限からどこかで妥協、ってことで・・・俺の場合、かなり裸よりのほう。
>>549 ROM/RAM の制限でグローバルアクセスとか、無茶苦茶だ。
問題ない範囲のカプセル化やオブジェクト指向もあるだろ。
C でもせめて private 扱いの変数を .c ファイルローカルにして
ヘッダの関数を通すとかさ。
>>549 実効データ/コードを伴わないヘッダファイルなら基本的にリソース食わないので、意味・用途に合わせたヘッダの分割やヘッダ単位での非参照externの取り込みをためらう理由はない筈
この辺はマトモなコンパイラならROM/RAMの制限は特に関係ないと思う
関数の小型化とファイル整理で境界を明確にする作業・資源のコストは、スパゲッティになって無駄足をたった一つ踏むリスクと十分に釣り合う物だと信じている。
全データを専用関数で操作しろってわけじゃないし、
>>550て事で
コンパイラの能力制限で1コンパイル中に取り込める外部参照数に制約がある等の理由があるなら仕方ないけどな・・・
AVRのアセンブラで#defineの改行文字のエスケープが1段しか展開できないから、多重マクロで代用するとか、
VC++の名前修飾の制約でテンプレート引数によるバリエーションが警告なしに集約されるから、マクロ関数で強引に展開するとか、
VC++のマクロ展開の制約で1段展開だと文字列化出来ないから、多重マクロにするとか、
多重マクロで__LINE__を展開してもデバッグモードだとバグるので、基本的には定数値のものをprintf族で展開したりとか、
そういう例を何度か見ていると時として非合理なことをやらざるを得ないってのは分る
グローバル変数を使うなってのは
オブジェクト指向以前の構造化の話
>>552 publicでstaticな変数を大量に作って
あちこちからアクセスするのか!?
OOPならグローバル変数使わなくても
組めるようになっただけだろ・・・。
オブジェクト指向以降でもグローバル使うなは
よく聞く話だが
>552
オブジェクト指向かどうかでグローバル変数に関する害が変わるの?
以前とか以後とか関係あるの?
>>549 が売っている、裸のクミコたんが気になる件について
557 :
552:2009/05/02(土) 22:08:25
オブジェクト指向云々以前の話という意味で書きました。
誤解を招く表現で申し訳ありません。
558 :
549:2009/05/03(日) 04:42:26
H8やH8Sで、cとASMで作ってました。C++やC#はありません。
8085+82xxシリーズもまだやってて、こちらはず〜っとASMだったのを私がLSIC導入しました。
へうになってからは、お仕着せのベクタ部や割り込み部テンプレがあるのはいいが
不透明なのとオーバーヘッドなのがちょっと嫌ですね。
>558
HEWにしただけでオーベーヘッドなんて有ったかな。
コンパイル済みのアセンブリリストで確認してみた?
560 :
549:2009/05/04(月) 05:22:23
動的オーバーヘッドは_INITSCT( )かな。初期値のコピーとクリヤする必要なくてもRAMクリヤ。
俺は初期値は書かないので実害はないけど。
静的オーバーヘッドは、0〜ベクタ、400h〜resetprgとintprog、800h〜アプリ、とテンプレ化
されてるとこ。詰めて使えない(w まあ、何百Kもあるんだから俺がセコいだけなんだけど。
hwsetup( )の叩き台も不親切。バスコントローラ関係なんてハード屋さんに聞かなきゃ
チンプンカンプン。 へうが環境用意してやるからcのメインから先を心配してりゃいいだろ的な
日立のおごりを感じる(w
561 :
559:2009/05/04(月) 08:03:18
>560
静的変数の初期化が必要なければ、確かに _INITSCT() は呼ばなくてもいいですね。
割込みベクタは詰められないので、resetprg が 400h からなのは仕方ないです。
アプリが 800h からというのは、リンカでセクションを仕切り直せは良いかと。
バスコントローラの設定なんて個々のシステムに依存するんだから、自分で対応しないといけないですよ。
562 :
549:2009/05/04(月) 17:14:13
レスありがとです。そういうのを、へうが出てからかなり後までDOS窓で自分でやってたのです。
コンパイルオプションやリンカオプションを環境変数に設定したり、環境ファイルに書いたり。
makefileを作り、makeを駆使してやってました。 (はい、自称シーラカンスと言ってます)
ソース一式は誰でも残すけど、.hwsを残さないと上記みたいな情報は消えちゃいますよね。
関数内でのスタックサイズ計算を16/32bitどちらでやるか、などCPU/コンパイラどちらに依存
すべきかみたいな情報も、あいまいな表現で残るし。「石と友達」 みたいな人がプログラム書くには
へうは足枷みたいなもんです。
563 :
仕様書無しさん:2009/05/04(月) 17:37:46
どこぞのスレの
// ここ掘れワンワン
// ∧_ ∧
// (・∀・* )
// (⊃⌒*⌒⊂)
// /__ノ''''ヽ__)
のコメント・・・ウチの会社だった・・・OTL
564 :
仕様書無しさん:2009/05/04(月) 18:48:26
何かバグあったらここ掘ってみ?ってことか
いや、もっとシンプルに
「やらないか」っていうメッセージだろ。
ソースコードを掲示板代わりにするという、プログラマ同士のコミュニケーション。
566 :
仕様書無しさん:2009/05/08(金) 00:51:53
where HOGE = nullが実行時エラーになるからと全テーブル全カラムが暗黙でnot nullで作られてるプログラム。
コメントをみる限り2005年作。
ですマーチの産物と思いたい
>>566 実行時エラーになってしまう言語仕様もどうかとは思うけど
全カラムnot nullで対応してしまうとこが悲しいかな
IT土方と言われてしまう所以
569 :
仕様書無しさん:2009/05/08(金) 09:39:00
try{
// 処理A
}catch(NullPointerException e){
// ぬるぽ対策
}
orz
■━⊂( ・∀・) 彡 ガッ☆`Д´)ノ
ぬるぽはバグだから対策も何も以下略
データベース的にNULLチェックを=NULLでやるのもどうかと思うけどな
え?基本、NOT NULLがデフォだろ?
574 :
仕様書無しさん:2009/05/09(土) 03:07:42
>>573 正規化を進めていけば自然とNULLは消えていくだろ
JOIN
>>574 数値や日時の未入力状態を、NULL無しでどうやって記録してる?
578 :
仕様書無しさん:2009/05/09(土) 09:30:14
>>577 どうしてもNULLを使いたくなければテーブル別にすればいいだけの話
>>576 全てのデータを1個のテーブルに押し込めるのが好きみたいね
NULL値の意味が分かっていない方がいらっしゃいます。
>>578 正規化すると必ずNULLが無くなると?
凄いな!!!!!
SQLが何のために3値論理を採用したか、まるでわかっていない馬鹿がいます。
NULLに関しては、とりあえず、C.J.Dateの主張を知ってから発言してくれ。
1:0..1の関係を1レコードでNULL使いまくりにするよりも、分割すればNULLを使わなくて済む。
そんなこと?
NULLがなぜ=で比較できないかも理解してないだろうなぁ。
仕様だから
>>577の問いに
>>578の返答が来るのがさっぱり理解できん
もしかして、NULL無しで記録するために別テーブルにするってことか?
で、その検索のために外部結合を使うとNULLが復活するわけだが(´д`)
Oracleに関して言えば、nullと空文字列の区別がつかない仕様があるので
無理に排除しようとすると余計に面倒になる。
今度新規自社開発パッケージの作成があるので、ちゃんとコーディング規約も作りましょうと提案したら煩わしいし生産性が下がるからって却下された
少人数でまわしてるから(移動はあるけど)必要ないって考えなんだろうけど…
他にも細々と面倒くさいこと良く提案しているけど、殆ど効率が下がるとかで却下されてる
書いたら書きっぱなし、ましてや他人のコードなんて絶対に読まない、ってことなんだろうな。
生産性よりも大事なことがあるだろうに。
ということは、コーディング規則を書いたら書きっぱなしになって理不尽な規則を延々守る羽目になるわけですね。
そのくらいならないほうがマシかもしれない。
面倒なら
規則1、他人に読めるコードを書き、それが不可能な箇所にはコメントで補足を入れること。
以上
このくらいで
逆だろ。釣りか?
594 :
590:2009/05/10(日) 02:36:53
>>591 他でも絶対とまでは言いませんが、確かにそんな傾向はあります。
他人が作ったんだから分からなくて当然って考えみたいです。
まあ、そういう方針でやってるんだから嫌なら辞めろってことですね
595 :
590:2009/05/10(日) 02:53:27
>>592 確かに一度作ったら、無駄な工数は割けないらしいので改訂などきっとしないと思います
ただ、それ以上に今のままではきっと強制力のない規約となるので理不尽なら破っても
何ら問題にならない可能性が高いです
逆に理不尽じゃないところも破っても多分問題にならないです
まあ、その規則に+αして強制力はきちんと持たせるって方にもっていくのが一番いい落としどころ
かもしれませんね
ただでさえ目をつけられてるので自重します
仕事ならそうだよなぁ
UNIXには、2回作り直せって格言みたいなものがあるが
脅迫されたらやるきしないよね。
読めればいいんだから単純単純
ふくらしこ装備してます
最低もう一人あんたに賛同してくれないと話の進めようがないな。
俺ってコードへたくそだよな。
そう思って自分のコードデバッグしてるわ。
pubilc Stat(int xxxCount, int xxyCount, int xxzCount,
int xyxCount, int xyyCount, int xyzCount,
int xzxCount, int xzyCount, int xzzCount,
...(20行略)
double zzzMin, double zzzMax, double zzzAverage)
{
this.xxxCount = xxxCount;
this.xxyCount = xxyCount;
this.xxzCount = xxzCount;
...
this.
this->
これ?
Javaなんじゃねーの
引数の数だろ
ってかそれに気づかないおめーらも同等レベルか?
604 :
602:2009/05/16(土) 16:23:26
>>603 そんなことわざわざ言わなくても分かるから
>>604 > 602 名前:仕様書無しさん [sage]: 2009/05/16(土) 14:28:57
> Javaなんじゃねーの
こんなこと言ってる奴にいわれたくねーよw
自演乙
プロデュース乙
お後がよろしいようで
610 :
仕様書無しさん:2009/05/21(木) 05:40:45
Random rand = new Random();
int getRandom(int min, int max)
{
return (rand.nextInt()+rand.nextInt()+rand.nextInt())/(max-min)+min;
}
ふつうにrand.nextInt(int)ってメソッドあるのにね
611 :
仕様書無しさん:2009/05/21(木) 05:41:42
あ、/じゃなくて%だった
>>610 javaは詳しくないから何とも言えないけど
(rand.nextInt()+rand.nextInt()+rand.nextInt())
これ結果が負の値になることはないのかな?
流石にそれは…ググれよ。
それより、3回足してる意味が判らん。
数値の偏りをどうにかしたかったんだろ
615 :
仕様書無しさん:2009/05/21(木) 09:30:52
>>613 大事な事なので3回言いました。
それよりminとmaxが同値の場合を考えるとむらむらしてくる
616 :
610:2009/05/21(木) 14:17:59
>>615 記憶があいまいだが、max-min+1だったかも、でも3回足してたのは間違いない
本人によると、1回だと、複数回使ったときに値が偏ることがあるから
とのこと(
>>614正解)。
>>612 nextInt()自体負になるっぽい(可能な値を一様分布で出力)
だから足したら桁あふれたりしそう
したらどうかわからんがしなかったとしても出る値が0に偏るよね
それ以前に余りを求めてるだけで偏るし
>>616 そうそう。そこは割るんじゃなくて余りを求めるはずだ。
んでアンサインドならいくら数字がでかくなって循環しようと関係ない。
一様乱数を複数足し合わせたら一様じゃなくなるよね
かえって偏らせてる
>>619 サイコロと一緒
サイコロを二つ投げたら目の和が7になる確率が一番高い
しかも2^n以外の値で剰余なんか取ったら益々偏る一方。
たまに偏るのも粋なものだよ
624 :
616:2009/05/21(木) 18:36:12
これぞ蛇足だなw
バカほど解ってないくせに余計な事をして、さらに問題を増やす
>>618 これは、「一様分布に従う確率変数の和の確率分布は一様分布ではなくなる」
ということでしょうか?
>>626 >>620の通り、と・う・ぜ・んですよ?
値域が変わっちゃうんだから。
値域が[0〜1)の一様乱数と、もうひとつの『値域が[0〜1]の一様乱数』
の和の値域は[0〜2)になるわけだが、この値域で一様に分布するとでも?
…と思ったけど、[0〜UINT_MAX]の乱数を二つ足して[0〜UINT_MAX]に
切り詰めりゃ(繰り上げ無視すりゃ)一様になるのか。
両端のあたりはめんどくさいから確認しねえよもう
この板は俺同様、底辺コーダの集いと思ってたけど
ちゃんとロジカルな話してて全俺が驚いた
本物の底辺コーダは、ソース見て会社辞めようとか思わないからw
632 :
616:2009/05/22(金) 14:10:36
>>627 うん
>>626 どんな確率分布でもそれを繰り返すと正規分布に漸近的に近づく
この場合一様分布だから0のところで盛り上がる
桁あふれはそれを折りたたむことになるが、それでも0が多分もっとも
確率高くなる
いわゆる中心極限定理
n回目に投げたサイコロの目 xn を 0〜5 に換算する
で、さいころの目の和に対して 6 で剰余を取る
( x1 + x2 ) % 6
( x1 + x2 + x3 ) % 6
これなら偏らないってのが
>>629
>>634 間違ってね?
結果が5になる確率が低い気がする。
> 気がする。
気のせいです。
637 :
616:2009/05/22(金) 22:15:00
>>634 あー、じゃあ折りたたんでも等しくなりそうだな
638 :
仕様書無しさん:2009/05/22(金) 22:26:42
自分で組めばいいじゃん
試しに ( x1 + x2 ) % 6 で計算してみた。
確率 : 和 : 余
1/36 : 和 = 0 : 余 = 0
2/36 : 和 = 1 : 余 = 1
3/36 : 和 = 2 : 余 = 2
4/36 : 和 = 3 : 余 = 3
5/36 : 和 = 4 : 余 = 4
6/36 : 和 = 5 : 余 = 5
5/36 : 和 = 6 : 余 = 0
4/36 : 和 = 7 : 余 = 1
3/36 : 和 = 8 : 余 = 2
2/36 : 和 = 9 : 余 = 3
1/36 : 和 = 10 : 余 = 4
合算すると、
余 : 確率
余 = 0 : 6/36
余 = 1 : 6/36
余 = 2 : 6/36
余 = 3 : 6/36
余 = 4 : 6/36
余 = 5 : 6/36
誰か ( x1 + x2 + x3 ) % 6 の場合をお願い。
もしくは一般化して。
>>640 ( x1 + x2 ) % 6 = y1 とおく
このとき y1 は 0 〜 5 の一様乱数
( x1 + x2 + x3 ) % 6 = ( y1 + x3 ) % 6
以下
>>640 と同じ
public int nextInt()
乱数ジェネレータのシーケンスを使って、一様分布の int 型の擬似乱数を返します。
nextInt の一般規約では、1 つの int 型の値が擬似乱数として生成されて返されます。
2^32 の可能なすべての int 値が (ほぼ) 均等な確率で生成されます。
nextInt メソッドは Random クラスによって次のように実装されます。
public int nextInt() { return next(32); }
戻り値:
乱数ジェネレータのシーケンスを使って生成された等分布の int 型擬似乱数
だから3回足しても一様乱数だな
643 :
616:2009/05/23(土) 14:04:43
結局出てくるものが変わらないなら、
余計な処理してるだけ頭悪くね?
3回足しても〜ってだったら3回足す意味なくね?
2回足すと酷いことになった
じゃあ足さなければよくね?
int/int による桁落ちのとこには突っ込まないの?
あ〜、cに慣れてるから%じゃないと剰余と思えなかったんだ。
そういえば俺も%じゃないと剰余と思わないな・・・職業病か
あれ? じゃ、あの言語では割り算は何て書くの?
mod
それは酷い言語ですね。
%
\
ここまでの流れをナナメ読みしただけだけど・・
奥村先生の本の中で、rand() を 6 回くらい足して 6 で割ると
ナニカがどうにかなっちまう、みたいな事を書いてたけど
そういう話?違う?俺バカ?死ぬ?
659 :
仕様書無しさん:2009/07/11(土) 20:31:24
// xを偶数で近似する。
x += 2;
----
理解できないのはおれだけか?
とりあえず2足したいんじゃないかな
コメント意味なしの方向で
x &= -2; の書き間違いかもよ。 コメントのほうが本気なら。
書き間違いにも程があるだろ
x *= 2;
かもしれない。
>>661 恥ずかしながらこの書き方知らなかった。
マイナスで上位ビットが全部立つのはC言語で既定事項?
CでもJavaでも何でもいいけど
>>664 二の補数を使うCPUなら全部そうです
言語はほとんど関係ないです
ほとんどと書いたのは、もしかしたらマイナスを専用フラグで持たしている処理系が
自分が知らないだけで、どこかにあるかもしれないからです
世の中には負数を1の補数で表現する処理系もあるんだそうな
C言語の規格もそれを反映してる
>>666 まあCPU内部では負の数はレジスタの1ビットで持ってるわな。
今時そこまでコアなマシン語を我々が扱うことはないけど。
えっ?
>>668 そうなの?
今手元にあるSH7211のマニュアルには載ってないよ
他のCPUの話をしてるのかもしれないけど・・・・
演算結果が負になったときにフラグが立つことを勘違いして言ってるのではないかと
8086のJNS命令とかで参照されるSign Flagのことか
>>668 誤解を招きやすい書き方は良くないと思う。
普通にMSBのことを言ってると思われ。
-1 を(16ビットで) 0x8001 とでも表現しそうな表現だからヤだな...
つーか、MSBのことをサインビットとも呼ぶってこと知らない子がCPUの何を語ってるんだい?
コアなマシン語というからてっきりw
話を勝手に符号拡張しないでくれる?
>>676 うん。仮に符号ビットのことを言ってるんだとしても
>>668 の書き方じゃあ符号ビット+絶対値表現に取れるな。
まあ
>>666 で答えは出てるし、引っ張るような話でもない。
実は浮動小数点の形式の話なんじゃね?
浮動小数点数は小数点の位置が固定で、固定小数点数は小数点の位置が浮動する。
不動小数点とか
>>664 知らなくておk。
~1と書くべきだから。jk
>>682 じゃなくて、普通にIEEE754は絶対値表現採用してて符号ビットが存在するって意味じゃぁ?
どのみちデータの一部が符号ビットとして振舞うわけだが。
データ型の一部としては大概高級言語でもアクセスできるというか大抵機械語の時点で既に演算命令越しだから、コアな機械語でないと触れないケースの方がレアだと思うな
機械語必須の符号ビットっていうとFPUを直接ゴリゴリ弄る場合くらいか?
コアなマシン語おせーてくらさい
>>686 CPUの仕様書取り寄せればズバっと解決
「コアなマシン語」と呼ばれるに相応しいのはやはり
非公開オペコードではないだろうか。
はあ?
コア内にのみ存在するマシン語なんだから、
マイクロコードのことに決まってるだろ。
>>690 なるほどねぇ。これなら、今時扱わないね。
>>620のは、コアな とは言わずに、コアの と言うとおもう。
age
//* このヘッダはCとC++両方から読み込むので */
//* どちらでも使えるようこの形式のコメントとする */
寝言はコンパイル通してからにしていただきたい
むしろ、C++のコメントを受け入れるCコンパイラで通ったのを見て、
「俺の書き方が正しかったんだ」と誤解してるんじゃないかな。
いずれにしても、そんな変なコメント考える奴とは仕事したくないが。
#if 1//**/2
#else
#error "//に対応していないコンパイラは死ね!"
#endif
コメントの使い分けとか基本中の基本だろ・・・
>>694が「コメントの使い分け」になってないから晒されてる訳だが...
素直に/* */だけで両方通るってのを忘れてる奴多すぎないかw
と思ったが単にソースをよく見てないのが一人いただけか
自信満々な感じがせつないなw
VBAだが変数名
a
b
c
・
・
・
aa
ab
・
・
・
初めて見たわ
難読化じゃね
エクセルの列番もそんなのだよ
>>703 難読化じゃなかったら、それ書いて発狂しないってのはある意味すごい
絶対に関わり合いになりたくないという意味で
ナイスな変数名が思いつかなかったんだろうか・・・
>>703 C
int i1,i2,i3,i4,*i5,i6,*i7・・・・
みたいなのを見たことがある
変数とポインタが混ぜこぜ。
自分がメンテ担当でなくて本当に良かった。
全部ポインタのつもりで
char* p1,p2,p3,p4…
とするやつよりマシかもね
それはすぐにコンパイルエラーになるから良いんじゃない?
//こうしないとコンパイル通らない
(char*)p2 = p1;
なんて事になるかもしれないけど
>>703 懐かしいな
昔のN88-BASICなんかからそのまま移植したのかも?
for(i = 0; ...){
for(j = 0; ...){
(なんか処理)
}
(なんか処理)
for(ii = 0; ...){
(なんか処理)
for(ii2 = 0; ...){
(なんか処理)
}
}
(なんか処理)
for(j = 0; ...){
for(jj = 0; ...){
(なんか処理)
}
}
}
もはや記憶も曖昧だがこんな感じのソースを見たことがある
jj とか ii2 とか出てきた日にはもうね・・・
ん、みやすいじゃん
修正してみた
for(v = 0; ...){
for(w = 0; ...){
(なんか処理)
}
(なんか処理)
for(vv = 0; ...){
(なんか処理)
for(vv2 = 0; ...){
(なんか処理)
}
}
(なんか処理)
for(w = 0; ...){
for(ww = 0; ...){
(なんか処理)
}
}
}
何か問題でも?
IQの低い人には読みづらいのかもね
i, ii, iii, iiii, .... じゃなくて良かったね
とある方々を悩ませるピリオドばっかりのメルアドみたいだな
ソースコードに草生やすなよ
ループの中に複数のループ、さらにそれぞれでネストとか、
コーディングが悪いのか、そうせざるを得ないデータ構造に
問題があるのか。
なんにしろ、こんなソースは読む気が失せるな。
もっとマシな書き方はありそうだよなぁ
別に理解できないほどとは言わないがどうにも汚い、ってのがある意味一番厄介
ループのネストが汚い、読みづらいという話がよくありますが、
ネストを避ける方法ってあるんですか?
>>722 1ループ毎に関数に分けると良いと思うよ!
処理単位に関数にするとか、クラスのメソッドにするとか、いくらでもあるだろ。
場合による
素直にネストした方がいい時ももちろんある、が…
関数に分けたり、コンテナを工夫したりする方がいいケースは多いだろうな
後からじゃ手の付けようがありません、ってケースもままあるけど
関数やメソッドで1つのループを書いて、
その中で別の関数やメソッドを呼んで、
その関数やメソッドの中でまた別のループを書くということですか?
そうすると多重ループに変わりはないですよね。
読みやすさのためにそうするということ?
この理由や意味が感覚的に理解できないんだったら、職業ブログラマは辞めた方がいいと思うよ。
1つのスコープの中でループやループのネストが多いってことは処理の局所化ができてないってことだからね。
つまり使い回しができない。同じ処理を何度も書かねばならない。大量のコピペを招く。ソースが肥大化する。人間の頭に易しくない。メンテできね。ってなるわけだ。
著者が嫌いな人もいると思うけど、Cプログラミング診断室でぐぐって読んでおくといいよ
古い文章だけど、かなりの部分は今でも通用する
なんにしたって、ケースによって書き方を変えて、読み易さが最適になるように
しろとしか言えんわな。
多重ループがダメ→じゃあ、1ループの中に1ループ程度もダメ、なんて思考停止に
はなるなってことで。
今週見つけた糞ソース
【その1】
iniファイルで”DEBUG=(開発者の苗字)”って入れるとデバッグモードで起動する。
その際に「(開発者の苗字)モードで起動します」とかダイアログ表示。
いやいやwwwそこは”=0”とか”=ON”とかあるでしょうがw
「デバッグモードで起動します」でいいでしょうがw
もちろん(開発者の苗字)はグローバル定数で宣言されていますw
それだけでは糞とはいえない
実は部長用モードとか御前様用モードとかあるんだろ
ソースのバイト数で部下の働きを評価する部長
累積の残業時間で部下の働きを評価する部長
添付資料のビジュアルインパクトで部下の働きを評価する部長
>>731 糞って言うよりは、頭の悪さっつか自己顕示欲が滲み出ているって感じ?
コードがきれいだったら、
あー、これ作ったやつは目立ちたかったんだね、と思いつつ、ばっさり変更するけど
複数の人間が触るソースの中で、
#if DEBUG_ASOH
...
#endif
...
#if DEBUG_HATOYAMA
...
というように名前が登場していたプロジェクトは経験した。
教科書的には「担当者が変更になった場合に整合性が崩れるから、デバッグの目的がわかるタグ名にすべき」
2〜3人くらいのチームではありがちだけど
とあるバカが作った関数
引数 :string型の配列
戻り値:引数の全要素を直結した文字列
ソース内容:
Private Function hoge(ByVal x() As String) As String
Select Case x.Length
Case 1
Return x(0)
Case 2
Return x(0) & x(1)
Case 3
Return x(0) & x(1) & x(2)
(略)
Case 20
Return x(0) & x(1) & x(2) & x(3) & x(4) & x(5) & (略) & x(18) & x(19)
End Select
End Function
こんな奴が共通部品作ってたりする・・・orz
>>739 その中でよく見ると一個だけミスってる部分とかがあるとさらに高得点!
21個目はどうするんだよ馬鹿
仕様外ですが?
むかしのBSDの/usr/games/foretuneに
Arithmetic is being able to count up to twenty without taking off your shoes.
-- Mickey Mouse
算数っていうのは、靴を脱がないで20まで数えられるようになることさ。
なんてのがあったのを思い出した。
そいつ、靴を脱いでコーディングしてなかったか?
>
>>741 Case Else
Dim y(x.Length - 21) As String
Array.Copy(x, 20, y, 0, x.Length - 20)
ReDim Preserve x(19)
Return hoge(x) & hoge(y)
を追加で。
>>744 x.Length = 0 だとコケるのでボツ
746 :
739:2009/09/06(日) 12:10:09
要素数が0と21以上だったらNothingが返ってきます。
・・・これが一システムの共通部品でなく、
会社が手がけた全システムで使用されているとか悪夢です。
他にも神懸かった関数がありそうだな
assert埋めてやったらバグがぞろぞろ出てきたりしそうだな
そもそも単に文字列を連結するだけだったら、
関数なんか作らなくても Join 一発で済むんじゃね?
いや、みんな知ってるから
実は0個か21個以上の時は空文字列を返す機能が重要だったんだよ!
いやもしかしたらjoinより高速なんじゃね?
明らかにステップ数を稼ぐのが目的だろJK
だったら20如きで諦めず100ぐらいまでやれよ
指が100本なかったからじゃね
あ!なるほどぉ
#
>>739の自動生成化
my $num_args = 20; # 引数の数
print <<__EOS__
Private Function hoge(ByVal x() As String) As String
Select Case x.Length
__EOS__
for $i ( 1 .. $num_args ) {
print "Case $i\nReturn ", join( ' & ', map "x($_)", ( 0 .. $i-1 ) ), "\n";
}
print <<__EOS__
End Select
End Function
__EOS__
何故にPerlで...つか、いらないし
>>757 joinのせいでネタが中途半端だ。
そこは、ジェネレータといいつつ同じ手法でボケるべきではないか。
#ifndef __IIZUKA_SHINE__ // エンベ第2のI塚は
#define __IIZUKA_SHINE__ // 仕事のできる1児のパパ
: // デスマの間も
: // 総務のK田S子と
: // にゃん♪にゃん♪して
: // いたんですねえ
: // アナタに引かれた
: // ピンク色の工数は
: // M山様にチクっておきました♪
: // こんパイるも滞りなく
: // 開発したのはナニですかあ
〜
: // えらーいパパのお仕事具合
#endif // まみちゃんにも教えてあげようかな?(^−^)
先週辞めた奴の担当ソース
どう報告しろってんだよ・・・orz
>>760 そのまま添付して報告すれば?何か問題あるのか?
>>761 760がエンベ第2のI塚さん、なんじゃない?
それは問題だな
>>760 が総務のK田S子の旦那とかなら
もうちょっと話が膨らむのに。
M山さんとやらにチクり済みなら、もうばれてるのでわ
そのままレビューやれ
おまえら、ソースコードの音読って知ってるか?(ry
>>760 どこかに
#ifndef __IIZUKA_SHINE__
... //何かを破壊するコード
#endif
があるかも知れない。その部分を消すとハマるぞ!w
どうせ呪うなら、会社のロゴとかデータ化して入れた中に
「田中氏ね」とかすかしでいれとけば?
フィルタかますとでてくるけど普通は見えないようにするとかさw
>>769 めんどい。
catでファイル後ろに追記するとか、付加情報領域に書く。
こっそりnewを入れられてたことならあったな
772 :
仕様書無しさん:2009/09/21(月) 06:58:07
Text1(3)
VB6です
#include "hoge.pas"
I塚って石塚か?と思ったけど、よく見たら飯塚だよねw
775 :
仕様書無しさん:2009/09/25(金) 14:22:16
load
load_2
load_new
load_backup
load_old
load_080305
もうだめぽ・・・
load_dai3shou とかは無かった?
>>775 ちゃんとバージョン管理をつかって、過去の関数は置き換えた段階で破棄するか、
一部機能では使うのなら、その旨明記して、まともな名前にして維持するか、
もしくは機能自体のあり方を見直して、引数で分岐出来る用にするか、
やってれば問題無かったんだろうけど、今更ですね、そうですねw
>>775 それ関数名じゃないよね
RCS等の管理ツールが無い環境(MS-DOSとか初期のWindows)だとディレクトリ名に日付を付ける
のが一般的だったから最後のは普通だよ
ディレクトリの更新日付見て他のも日付付きに直せば良いんじゃない?
リビジョンの枝分かれがあると死ねるけど
えっ
スレタイ見てそう考えたなら凄いな
#define if while
なんだその嫌がらせ…
if を whileにしちゃうと、実行時の挙動が明らかにおかしくなりそう
場合に依っちゃ無限ループもするだろうし
whileをifにする方が、
ループのつもりなのに、一回しか実行されない、という、
目立ちにくいバグになる希ガス
どっちにしろ 一瞬で気づくだろ
どっちにしろ全く気付かなくて、謎が解けた時は犯人を本気で絞め殺したい気分に
なると思うがw
全く気づかないはずがないだろ
真の場合 ループするIFだぞ?
一発で気付く方がどう考えてもおかしいと思うが
ステップ実行でループした時にはものすごい衝撃だろうなぁ。
ノーヒントなら、ステップ実行してループしてもまだ何だか分からないと思うw
そんな変な動きならわかるって…。
初心者だら気づかないのは当然だが
誰かが作為的に罠を仕掛けた可能性に至らなければ、
自分のコードのどこに問題があるのかで小一時間は悩む気がするわ
初心者とかいう問題じゃねーだろw
おそらくこうなる
___
/ || ̄ ̄|| ∧_∧
|.....||__|| ( ) どうしてこうなった・・・
| ̄ ̄\三⊂/ ̄ ̄ ̄/
| | ( ./ /
___
/ || ̄ ̄|| ∧_∧
|.....||__|| ( ^ω^ ) どうしてこうなった!?
| ̄ ̄\三⊂/ ̄ ̄ ̄/
| | ( ./ /
___ ♪ ∧__,∧.∩
/ || ̄ ̄|| r( ^ω^ )ノ どうしてこうなった!
|.....||__|| └‐、 レ´`ヽ どうしてこうなった!
| ̄ ̄\三 / ̄ ̄ ̄/ノ´` ♪
| | ( ./ /
___ ♪ ∩∧__,∧
/ || ̄ ̄|| _ ヽ( ^ω^ )7 どうしてこうなった!
|.....||__|| /`ヽJ ,‐┘ どうしてこうなった!
| ̄ ̄\三 / ̄ ̄ ̄/ ´`ヽ、_ ノ
| | ( ./ / `) ) ♪
___ カタカタカタ・・・
/ || ̄ ̄|| ∧_∧ ちょっ
|.....||__|| (# ) なにコレうぜぇ
| ̄ ̄\三⊂/ ̄ ̄ ̄/
| | ( ./ /
でふぁいんがどんな意味がわからない奴以外で
動きみて気づけないやつはアホだろ。
自作のプリプロセッサ間にかましてるなら別だが。
781って何に使うの?
vcsでupdateしたとき、他人がどんな変更したか見ないアホばっかりなのか?
ソース管理ソフト使ってない前提でいいだろw
>798
全部見るの?
>>797 いたずら
WhileをLOOPにしてるソースならみたことあるな
>>800 もう誰も信用できない、殺伐とした職場なんだよ。
まわりは全部敵なんだよ。
殺るか殺られるかなんだよ。
簡単に気付くと言ってる奴は想像力が欠如してるだろ
アホとか言い出すからだんだん殺伐としてきたじゃないか
ここは殺伐とはしてないよ?
俺、全力で
>>798 を罵倒しようかと思ったけど
踏みとどまったもん。
俺も
>>796を罵倒しようかと思ったけど踏みとどまるというか面倒だからやめた
>>800 updateしたせいで、自分のソールがコンパイルされる場合は、該当ヘッダーは全部見るけど?
見ないの?
UnitTestを用意してないのが悪い。
以上。
VSS って時点でダメだろ。
さっさと svn か水銀使えよ。w
ドカタの現場はVSS大好き。
eclipse使ってるのにわざわざVSSを入れたり。
ほかのバージョン管理はチェックアウトしてるときにファイルにロックがかからないのが気に食わないらしい。
でも、VSSを使っていても、俺の変更がなかったことになってたことがもう2回くらいおきてる。
それVSSじゃなくても起きるんだけど。VSSのせいじゃないよね。
ロックかかるほうが、安全とか安心とか思ってるからVSSを選んでるんだと思われるけど、
VSSでも事故おきるし、べつにロックかからなくてもいいんじゃねってこと。
集中型なんて使うから
diffやpatchを使ったことがない人は
ロックしないと不安になる
>>808 俺は差分だけを見る。全部読むの?そんなにヒマなの?
修正するソースをExcelに書いて、
ローカルにコピーして、
修正後戻してExcelにチェックする職場よりはマシさ。
SubversionでもLockできるんだけどね。
お前らロックだな
ハードロックです
俺はハーロック。自由の旗の下に生き、自由の旗の下で死ぬ。
俺もロックだ
ぽよよんろっく
ぼくはロック=リビングストン。
826 :
仕様書無しさん:2009/10/03(土) 12:51:48
デッドロックだ
vssを使う奴はもれなく低能
>>817 ファイルの全行じゃなくて、変更されたすべてのファイルのdiffを見る。
つーか、見るもの同士で揚げ足とっても意味ないじゃん。
差分見るのにWinMergeつこうてるんだが、
もはや全体が違ってるってな感じに表示されちゃうw
意味ねー
つーかwindiffの方がちゃんと差分表示できる?
830 :
552:2009/10/04(日) 00:01:23
だなw
馬鹿はホント逆に逆に行くな。
才能としか思えんww
馬鹿に限って、いっぱい修正入れて、いっぱい仕事した気になってやがるw
IT業界、世界同時不況では製造業並みのダメージをうけ、
鳩山布教では建設業並みのダメージをうけるわけですね、わかります。
鳩山布教という変換ミスがあながちミスとも思えなかったりして
狙ってたりしてな
そうか?鳩山政策は結構IT業界にプラスだと思うぞ。
例えば一見無茶な省エネ目標も、IT関係にもデータセンターリプレース需要でプラス要因だろ。
ただでさえ利益出てないのに
銀行から金借りてまで売り上げに関係無いリプレースを推進する企業ばかりならな
>>837 だからこそのエコ政策だろう。
90年比で25%削減するというポーズを実行にうつすには、
省エネを名目にしたリプレースに補助金を出すとか、
エネルギー効率の悪いところには懲罰的な扱いをするとかして、
省エネ(という名のリプレース需要)を推進することになるだろ。
補助金?国の金は無尽蔵じゃないんだよ
デフレ傾向に有る限り、貨幣価値を考えれば、
要は日銀が金を印刷すれば良いわけで
ある意味、そこそこの段階までは、無尽蔵と考えて差し支えないような気も
価値を考えなければいけない段階で無尽蔵とは言えないだろ
誰が無尽蔵の補助金を要求しているんだ?
普通に、国家予算中のまとまった金が「省エネ」実現のとために投下され、
その一部がIT業界にも流れるというだけの話じゃないのか?
そういう極論する人って、口先ばっかりで実務がまるでダメな人が多いよね。
ウヨサヨ以前に、政治の話になると熱くなる莫迦って邪魔よね。
スレタイ読めない人たちに政治語られたり実務とか言われてもね
そーやってどんどんあぶれていくんだな
ん?政治語ってる奴いるか?
補助金ビジネスを語ってる奴ならいるみたいだが。
バシーン
ダダダッダpublic void foo()バシーン
ダダダッダ{バシーン
ダダダッダダダダッダhoge();バシーン
ダダダッダ}
バシーン
うるせえよ馬鹿
ソースを上の方にスクロールさせて、voidを使ってる所を探して
マウスドラッグで選択して、右クリックメニュー出してコピーする。
さっきの所までスクロールして戻って、右クリックでペーストする。
別のソース開いて、fooが出てくるところを目視で探して以下同文
そんな感じで一行のコードを完成させるのに3分かかる新人とどっちがマシか勝負だ
お前が何とかしてやれよ
>>847 ワロタ 床から立ち上がってるIBMのコンソール(「怒り狂ったゴルフボール」の奴)
俺がリターンキー叩いたらビリビリ振動して、お前壊すなよ、って言われたの思い出した。
スペースでインデントとか勘弁して。
>>853 メモ帳で開発してるひとはそうでしょうね。
TAB,SPC混在じゃなければどっちでもいい。
TABだと環境依存でソースの「見え方」が変わる。
スペースを使えば固定幅フォントさえ使っていれば
ソースの「見え方」がかわることはない。
実際、Pythonなど、スペースでインデントする環境はそれほど少なくない。
ゆうたら空白とTAB混在もUnix系だと普通。
なんで混在が嫌なのか知らんけど。
タブのみまたは空白のみならば、タブ設定がかわってもインデントの関係は保たれる。
タブと空白が混在すると、タブ設定によってインデントの関係が逆転することがある。
保存時、タブを空白にする
統一ルールでおk
expand -t 4 | unexpand
「いーや!2桁にしないと横に伸びすぎて見えなくなる!」
とかだったら、まさにスレタイ通りだな。
Linuxカーネルって「インデントはタブでやれ」「8タブ以外は氏ね」だっけ?
うん、でもって、1タブ=8スペースで画面幅が足りなくなったらロジックを考え直せ、と続く。
ここで置換機能の出番でございます
ここで痴漢機能の出番でございます
>>852 の「スペースでインデント」って、スペースキーを
押してインデントしてるって意味だろ?
>>847からの流れで。
>>861 インデントは実体がスペース(0x20)にしろタブ(0x09)にしろタブキーでやるので、
4重かよ!とおもたわけでしてはい。
四回か八回叩いてるんだからスペースだろ
>>864 そういうコンベンションにしているところのソースって、
やたら関数名や変数名が短かくって読みにくい。
C#のコード。
やりたいことは分かるのだが……
if (param == 0)
{
//何々
}
else if (param != 0)
{
//何々
}
else
{
throw new NotImplementedException();
}
paramがvolatileなら、と一瞬思ったが、そういうコードではなさそうだしなw
未定義値ならありえるのか..
param が double で、値がNaNなら十分ありえる。
NaN?だとぉ
大体、NotImplementedExceptionでいいのか?
JavaだとIllegalStateExceptionあたりかな。
C#にもきっと似たようなのaあるだろう。
>>871 やりたい事が分かるならスレタイ的には問題ないレベル。
そういやC#にはNullableが導入されてたなあと思ったが
それでもこのコードは無意味やな・・・
意味はないが害もないのでメンテ中にあってもそっとしておくレベル
>>871 のコードは、カバレージ100%試験はしてない…んだよな?
paramがメンバ変数ならelseもありえるんじゃないか?
ん?なんで?意味分らん
つ マルチスレッド
元々、こーだったんじゃねの?とエスパー
if (param == 0)
{
//何々
}
else
{
throw new NotImplementedException();
}
後で param != 0 を付け足して最後のelseがゴミとなって残ったんじゃ?
俺にはこうエスパーできた(電波がきた)
if(param == 0) {
云々
} else if (param != 0 && 何かほかの条件) {
云々
} else {
throw new NotImplementedException();
}
後で「何かほかの条件」がなくなった
887 :
仕様書無しさん:2009/10/10(土) 19:21:25
>>886細かいことだが
if(param == 0) {
云々
} else if (param != 0 && 何かほかの条件) {
云々
} else {
throw new NotImplementedException();
}
は
if(param == 0) {
云々
} else if (何かほかの条件) {
云々
} else {
throw new NotImplementedException();
}
でもいいよなぁ……
889 :
仕様書無しさん:2009/10/10(土) 22:36:50
ギャグのようでマジな話。
typedef int NUMBER;
びっくりして二度見した。
別にありじゃね? 仕様とか背景が分らんからなんとも言えんが。
//お客様の要望です
お客様の要望は未知の世界
ソース見て要望を出すお客様なら、上手く立ち回ればチャンスにできる。
「お客様」が元請じゃなくてエンドユーザを指すならな。
>>889 Pro*C だとありそうだな。VARCHAR 構造体とのバランスで。
それにしたって整数固定はないだろう、とは思うけども。
マ暦1年未満、仕事でコードかいたのは3ヶ月未満、言語はC#のみ
ついでにいうとJava暦0年。そんなトーシロですが
int i = 0;
Hoge hoge = hage();
whire(hoge == null && i <= 0) {
hoge = hage();
if(hoge == null) {
Thread.Sleep(Const.WAITE); //失敗してたらちょっとまってリトライしたいらしい
}
i++;
}
if(hoge == null) {
return; //例外処理?なにそれ?食べれる!?
}
//以下本当にやりたい処理
---
うちにいるそこそこできるらしい中華コーダー産
elseでくくるの忘れたんだとしても実行する前に気づかないんだろうか…
まぁ上限ないからelseつけてインクリメント回避するようにしたら無限ループする可能性あるけど
whire
~~~~~
ないわー
ん? きれいではないが別に動きとしてはおかしくないような... iがリトライカウント(この場合は最大0回)でしょ。
typoくらいみのがしてやれw
>>897 1回目のループで必ずループ抜ける条件になるから
そもそもwhileで回す意味なくね
あ、ごめんなさい
i <= 1でした。ってか0だとそもそもループの中にすら入ってないよね
>>896 ごめんなさい
チャイナにしてはよくできたほう
本物はこんなもんじゃない
最大2回リトライするなら、i < 2 と書いて欲しいかな。
ループは <= より < の方がループ回数が分かりやすくて好きだ。
初期値次第だし
社のコーディングルールが気に入らない
コーディングルールがあるだけましじゃね?
>>899 hoge が nullでi=0ならループに入ってくじゃん?
隣の先輩のコードが
if (memcmp(・・・) == TRUE)
と、なってて、そりゃねーだろと思ったけど、定義をみてみたら、
#define TRUE 0
#define FALSE -1
で、まあ、気持ち悪いけど、これなら動くなと思ってたら
if (memcmp(・・・) == FALSE)
って、書いてるところもあって、やっぱこりゃだめだと思った。
何日かしたら、やっぱり「なんでこれ、こんな動きなんだ!」みたいに騒ぎだして、
わかってる人から、「そこは != 0 だよ」みたいに教えてもらってた。
「あれ、おれ、なんでこんな書き方してるんだ、ほかのソースはちゃんと書けているのに」
って言い訳をはじめたけど、たしかに、その先輩は基本的に人のソースをマネして
書く人なんで、どうしてそんなところだけ独自に書いてバグってんだって感じ。
それから memcmpを検索して、順番に
== TRUE だったら == 0 に
== FALSE だったら != 0 に
書き直していってたけど、そんな修正してたらミスらねーか? って思ってたらやっぱり何箇所か
== FALSE を == 0 って修正ミスしてた。
俺には関係ないから黙ってたけど。
行き当たりばったりか。
そのまま行き倒れりゃいいんだけどな。
「真偽値を戻す (C の場合は 0/0以外だけど) 関数が理解できない」
とか、
「if 文は必ず関係演算子を使った形でないといけないと思っている」
とか、そーゆーの多いね。
一般化した形で把握することができないんだろう
抽象化が苦手なタイプ
>>909 >抽象化が苦手なタイプ
心底プログラマなんかやめちまえって思うな
変なコード持ってきて、うごきません、とか言われるとイラッとくる
それを読んでる時に横からゴチャゴチャ言われるとキレそうになる
採用時の適性検査はコード書かせてレビューさせろマジで
動かないって言うから見てみたら、俺のソースまるパクリで
バグの原因が変数名の変更し忘れだった日にゃもう・・
しかも呼ばれるときのせりふが「お前の作ったプログラム動かんぞ」だろ?よくあるよな。
>>895 チャイナなめんな!
値保持が全部テキストボックスだった事があるんだぞ!変数の代わりに!
論理和使うと分かんなくなるからやめろ!って人ならいる
ビット演算便利じゃん
内容は省略して簡単なものにしてるが、
if ( n != 0 ) a = true; else
a = false;
|
|
モニターはこのへんで右端
いいかげんにしろ向かいに座ってるカスw
elseまで書いたんなら改行するなw
改行しても同じカラムから続きを書くなw
>>917 VB脳だろ。そいつ。
if then
だから
if else
って書かないと気がすまないんだよ。
ずいぶん小さいモニターなんですね
920 :
仕様書無しさん:2009/11/14(土) 06:16:49
深い階層の一部を抜き出してるんじゃね?
たまにいるだろ、やたらネストするネストオタが
普通はelseの前で改行するわけだが
ネストが深くなるのはプログラムを書く技術がないわけでして
if (n != 0)
NantokaForm.NantokaListBox.Items[i].Enabled = true;
else
NantokaForm.NantokaListBox.Items[i].Enabled = false;
みたいなのは1行でやれって話かと思ったが違うのか
>>922 そういうの普通は参照だけ抜き出さない?
1行でっていうとこうかな
NantokaForm.NantokaListBox.Items[i].Enabled = (n != 0) ? true : false
普通に
NantokaForm.NantokaListBox.Items[i].Enabled = (n != 0);
でよぐね?
>>926 話が脱線してる
それはEnabledにboolを突っ込む方法だ
え? そういう話じゃなかったの?
item = NantokaForm.NantokaListBox.Items[i];
if (n != 0)
item.Enabled = true;
else
item.Enabled = false;
オリジナルより行数増えとるがな(´・ω・`)
item = NantokaForm.NantokaListBox.Items[i]; if (n != 0) item.Enabled = true; else item.Enabled = false;
NantokaForm.NantokaListBox.Items[i].Enabled = (n != 0);
でいいじゃん。
(n != 0)の値って、1か0を返すんじゃないの?
trueとfalseを返すんだっけ?
どっちにしろキャストされるから問題は出ない
違いが問題になるのはオーバーロード解決の時くらいじゃね
>>934 (n!=0) は式なんだから、bool値が返るだろ
#define TRUE 0
#define FALSE 1
,.=-''' ̄ ̄ ̄ ̄ ̄ ̄` -、
/ \
./ .\
{ }
.| / ̄""''-=,,,,_,,,,,,==-'''"\ |
.l, .( ,. - ' .、 ,. - , .} |
l > ,=ニ\ ゛ | ''゛_,=ヘ、 r' {_
/~''i //_\_..`7| l、{''″/__`>ヽ |r`i
l .{`|./ ヽ二・ニゝチ、 ! .ゝrニ・二r } ! i l
{ {(l { ノ | | ヽ :: }| ソ/
ヽヽ|.{ / | | \ i.|//
\|.i / ,,.. | l._,, . \ i !/ ______
乂i / - (__,)-゛ ' {丿 /
.l .!、. ,. !., ., / | | 用件を
人 \ .!''''" ̄~ ̄`''! / 人 <
./ | .\ ,\ '-"" ゛-' / / | .ヽ | 聞こうか…
ノ .{ \ .ヽ,., .: ,イ / } ヽ \______
-'″ l `' 、`.───″ .} ヽ
>>917は if の書き方の話だろ
どうしてこうなった
#!/bin/sh 用のスクリプトを書いていたら返却値 0 = 真 だったので困惑した。
945 :
仕様書無しさん:2009/11/21(土) 06:42:25
かぎかっこでくくったCREATETABLE文。
30個くらいのテーブルのPKに全て同じPK名を付けてたCREATETABLE文。
マジ悪意わいた。押さえるのに必死だった。
殺意じゃなくて悪意なのか。
悪意が沸いたのでそのままにしておこうかと思ったが
ぐっとこらえて全部修正したという事ではなかろうか
PK名なんてわざわざつけなくても、自動でつけてくれるだろ
さすがにそれだけじゃ通報されない
951 :
仕様書無しさん:2009/11/22(日) 10:10:48
>>947 う、その通りだ。
全部修正して全部確認したさ。一日つぶして。初期値設定もでたらめだったし。
952 :
仕様書無しさん:2009/11/22(日) 10:16:27
>>949 確かに一応その辺は少し気にして念のためそうした。
NantokaForm.NantokaListBox.Items[i].Enabled = !!n;
!! はイディオムといえばイディオムではあるが…
わかっていても使いたくはないな。
n
と
!!n
って何か違うの?
boolean にキャスト
手元にC#の環境ないから確認できないけど、「!」ってC言語みたいに数値型にも使えるんだっけ?
MSDNには、boolに対して有効みたいに書いてあるんだけど、
C# 言語リファレンス
! 演算子 (C# リファレンス)
論理否定演算子 (!) は、オペランドを否定する単項演算子です。この演算子は bool に対して定義されており、オペランドが false の場合だけ true が返されます。
bool b = !!1;
C#でやったら普通にコンパイルエラーだったわけだが
つーか元の言語は何なのか?
C/C++だろ。
0とそれ以外の値を、0と1に変換するイデオム。
どうみても.NETなんだけど、C++だったら、
NantokaForm.NantokaListBox じゃなくて
NantokaForm->NantokaListBox じゃなかったっけ?
だからC#かと
C#で!!なら、辞めようと思うソースコードだな。
>>955 bool operator ! をオーバライドしてる状態で、
結果を反転させたいとき。
是非はともかく。
C++/CLI ならすべて解決!
int a = 0;
int b = 1;
if ( a < b ){
//something
}
スペース区切りだと思うだろ?全部タブだったんだぜ。
それはタブーだな
タブんそうだな
タブ幅1か!
タブ幅は8以外認めん!!!
8はキモ過ぎる…
俺はタブ4推進主義派
俺はタブ幅に左右されない可読性を持ったコード推進主義派
Javaのコーディング規約ってタブ幅8でインデント幅4だったっけか
俺のお腹は32タブぐらいかなぁ
切り落とせ
久々にタブクリア飲みたいな。
タブ8、インデント4だろjk
$ cat ~/.exrc
set ht=8 sw=4 ai exrc
978 :
仕様書無しさん:2009/12/01(火) 18:04:50
意味が分からない仕様書。
○○の場合、承認処理。
だから承認処理ってなんだよ。それするとどうなんだよ。
その先を書け馬鹿。入ったばかりの助っ人にこれで分かるわけないだろ。
最近こんなんばっかりで発狂寸前。誰か助けて。
>>978 とりあえず、わからねえとつっかえせば。
>>978 データに署名が付加されるんじゃないの?
署名の実態がどんなもんかは知らないが。
>>978 あるあるw
仕様書のはずなのに、肝心の実装すべき業務内容が全く定義されてない
こんなものは仕様書じゃねぇ、妄想ノートと呼ぶべきだ
次のスレタイは「この会社辞めようと思った仕様書」で
「この会社辞めようと思ったソースコード・仕様書」もいいな
当面は仕様書の話もありにして、いい感じならテンプレに「仕様書の話もおk」と
書いて、スレタイにも入れないと不便だとなったらスレタイにも入れる、くらいで
いいんじゃね
今のスレタイでも同じ需要の人は見に来るだろうし
986 :
985:2009/12/03(木) 00:13:59
すまん間違えた。
ここじゃんw
変わったのりつっこみだな
select sum(A) from
(
select sum(B) AS A from…
union
select sum(C) AS A from…
)
みたいなコードをみつけた。
sum(B)とsum(C)が同じ値になったら、行がまとめられちゃうじゃん。