ぱっと見て「ヘタだなぁ」と思うコード その7
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/10/30(火) 03:00:12・長い関数
・深いネスト
・グローバル変数
・goto
・memset
・malloc - free
・局所ブロック
・サンプルコードのtypo
・記述スタイル
・関数・変数名
過去スレ
その6: http://pc11.2ch.net/test/read.cgi/tech/1193250955/
その5: http://pc11.2ch.net/test/read.cgi/tech/1155315371/
その4: http://pc8.2ch.net/test/read.cgi/tech/1153312202/
その3: http://pc8.2ch.net/test/read.cgi/tech/1149986051/
その2: http://pc8.2ch.net/test/read.cgi/tech/1142741989/
初代 : http://pc8.2ch.net/test/read.cgi/tech/1141867015/
0002デフォルトの名無しさん
2007/10/30(火) 03:02:05乙
0003デフォルトの名無しさん
2007/10/30(火) 03:03:470004デフォルトの名無しさん
2007/10/30(火) 03:03:590005デフォルトの名無しさん
2007/10/30(火) 03:04:44何?新ネタ?
それとも前スレの続き?
0006デフォルトの名無しさん
2007/10/30(火) 03:04:460007デフォルトの名無しさん
2007/10/30(火) 03:05:36でも真ネタ考えるんなら時間かかるから待って
0008デフォルトの名無しさん
2007/10/30(火) 03:05:50>「代用する」って書かれてる?あるならどこ?
>あと「代用」の意味をお願い
これレスもらってないんだけど
0009デフォルトの名無しさん
2007/10/30(火) 03:07:55ISOに
> true (nozero)
の一文が有ったらしい。
0010デフォルトの名無しさん
2007/10/30(火) 03:07:59まだ見てたら>>8にレス頂戴
0011デフォルトの名無しさん
2007/10/30(火) 03:08:13前スレ、どっちが909でどっちが910か分かり辛い。
…もっともどっちも阿呆だから判別の必要すらないかも試練が。
0012デフォルトの名無しさん
2007/10/30(火) 03:08:15前スレ
http://pc11.2ch.net/test/read.cgi/tech/1193250955/
80 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/26(金) 22:43:44
>>72
"== NULL"
"NULL =="
こんなの多数決で考える頭はもうちょっと働かせたほうがよい
if(変数 = NULL)
が引き起こすバグをどうやって見つけるのか考えた事がある?ない?
難しい正規表現でも作る?`NULL'以外の場合もあるよ。
それより定数を左辺にもってくる方法を身につければいいだけじゃない?
自分がグループリーダーになったとき、部下のミスを見つけられるレベルになれる?
これはただの忠告。>>72はそれでいいならいい。私に累が及ばなければどんなコーディングでも結構。
プログラミングの先生だって×は出さないだろうしなw
0013デフォルトの名無しさん
2007/10/30(火) 03:08:37でも前スレで、0と、0より大きい数と、0より小さい数を返す関数の話を見てたら
0より大きな数であって正数ではない、0より小さな数であって負数ではない
でも、その数字に意味はないと、変なことを言う人が居るんです
もう一人の人が、それは符号だろと突っ込みを入れてるのに、いや違うと言い張るんです
こんぴゅーたーの世界って凄い世界ですね
0014デフォルトの名無しさん
2007/10/30(火) 03:12:04君誰?
0015デフォルトの名無しさん
2007/10/30(火) 03:12:42そのネタつっこみやすいから良いよ!!
数学の世界で0より大きい数と言えば正の数だが、コンピュータの世界では、
0より大きい数といえば、単に0より大きい数でしかない。
逆に、正の数といえば、正の数でもいいし、0より大きい数でも良い。
なぜかというと、0 がマジックナンバーだから。
正の数といわずに、あえて、0より大きい数といってるのだから、
0 に何か意味があるのだろうと考えるのがコンピュータ屋さん。
0016デフォルトの名無しさん
2007/10/30(火) 03:12:57前スレを見なかったフリして書き込むけど、
> if(変数 = NULL)
>
> が引き起こすバグをどうやって見つけるのか考えた事がある?ない?
> 難しい正規表現でも作る?`NULL'以外の場合もあるよ。
lint でみつけらんねーか?
てか、最近ならコンパイラにもプリプリされそうだけど。
0017デフォルトの名無しさん
2007/10/30(火) 03:14:53> C++の場合は、
> http://www.fujigoko.tv/rev/prof/
> の、文書的プログラミングとは?
> の桃太郎の部分を参考に。
>
> ・オブジェクトの状態を変える(セットする)
> ・何らかの処理を行って結果を返す
>
> この2つは分けるのがC++の基本です。
>
> で、オブジェクトの状態を変えるときにはいっぺんに複数の
> パラメータを変化させるのではなくて、
> 変化するパラメータと、それには影響しないパラメータを分離します。
> というやり方で引数だらだらを避けます。
C++で引数減らせるなら当然Cでも減らせます。
いまどきはCベースのライブラリでもたいていオブジェクト指向的な設計になってます。
むしろ、propetyとmethodの単純な二元論で設計しようとする場合の弊害を気にすべきです。
話がそれましたが、つまりいいことはオブジェクト指向のご説明は不要ということです。
0018デフォルトの名無しさん
2007/10/30(火) 03:15:37誤代入を防ぐために定数を左に書くってのはセンス無いよね。
if( !p ){ /* ヌルポ */ }
if( NULL==p ){ /* ヌルポ */ }
if( p==NULL ){ /* ポヌル */ }
ポヌルより、ヌルポだろ、ぐらいは言って欲しい。
0019デフォルトの名無しさん
2007/10/30(火) 03:18:560020デフォルトの名無しさん
2007/10/30(火) 03:19:45> 「C言語で符号を調べるには、0 と比較するしかない」
企画書のどこに、「C言語で符号を調べるには、0 と比較すればいい」って書いてあるのですか?
符号を調べる方法が0と比較する方法以外にあるかないかは全く関係無しで、「0と比較すれば調べられる」ってのがどこに書いてあるのか知りたいのです。
これなら書いてある箇所を示せば済む話だから、悪魔の証明とか難しい話じゃないですよね。
あと、
>> つまり、Cは整数で真偽を代用する。
>これがどこに明記されているか、さっさと出典を示せよ。
これに対するお前の回答を早いとこ頼むよ。
前スレ892のは証拠になってないからね。
0021デフォルトの名無しさん
2007/10/30(火) 03:20:1281 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/26(金) 22:45:53
>>80
ええ? そのバグを防ぐ方法を知らないの?
こういう話のときには必ずでるのに。。。
基礎の基礎だよ。
172 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/27(土) 02:34:05
つーか、条件式の定数を左に書くのは、代入文の検出とかいってる奴なんなの?
レベル低すぎてどうしようもない。ちげーだろ。
if( NULL == hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8) )
{
}
if( hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8) == NULL )
{
}
前者と後者、どっちが読みやすいかって話だ。
そもそも関数の引数が多すぎる、とか言われても困るぞ。
Win32APIとかだと、引数8個程度のなんてゴロゴロあるからな。
あと、後者だと、環境によっては==NULLがエディタの外に出てしまって、見えないことがあることも付け加えておく。
0022デフォルトの名無しさん
2007/10/30(火) 03:21:33187 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/27(土) 03:22:49
>>172
「普通の感性を持っている人」は、そういう場合は次のようなコードを書くから、なんら心配することはありません。
void *p = hoge_func(hoge_arg1, hoge_arg2, hoge_arg3, hoge_arg4, hoge_arg5, hoge_arg6, hoge_arg7, hoge_arg8);
if (p == NULL) {
}
理解できましたか?
191 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/27(土) 03:32:51
とは言ったものの、わざわざ
int ret = strcmp(str1, str2);
if(ret == 0){}
なんて書く奴がどれだけ居るのか気になるが。
192 名前:デフォルトの名無しさん[sage] 投稿日:2007/10/27(土) 03:35:07
>>191
その程度なら、
if (!strcmp(str1, str2)) {}
と書くのが一番分かりやすいから。
こうして不毛な論争がはじまった。
0023デフォルトの名無しさん
2007/10/30(火) 03:24:42前者に関しては
6.5.8 Relational operators に書いてある。
後者に関しては
前スレ>>892 で納得できないなら、Cは整数で真偽を代用するわけではない、で良いよ。
0024デフォルトの名無しさん
2007/10/30(火) 03:25:13不毛どころか議論にすらなってない。
0025デフォルトの名無しさん
2007/10/30(火) 03:25:59引用よろ。
0026デフォルトの名無しさん
2007/10/30(火) 03:26:03感動した。
0027デフォルトの名無しさん
2007/10/30(火) 03:26:04規格に0と、0より大きい数と、0より小さい数と書かれているのに、将来的に1になったり10になったりすることが有り得るのでしょうか?
また、将来的に変更が有り得た場合、過去との互換性はどうなるのでしょうか?
規格として0を基準にした関数と設計されているのであれば、将来的にも0が基準であると思われるのですが
(現存する過去のプログラムを全て変更することは難しいし、変更前のコンパイラと、変更後のコンパイラが存在する場合に、問題は最悪の方向に向かって進むと思われますが)
0028デフォルトの名無しさん
2007/10/30(火) 03:26:18>前スレ909
>だからC言語で符号を調べる場合は 0 と比較することになってる。
ISO9899に書いてない方法もあり得るのだから、
「C言語で〜することになってる。」はダウト。
この一言で済むのに
>前スレ910
>それはISO9899:1999の§いくつに書いてありますか?
阿呆か。
0029デフォルトの名無しさん
2007/10/30(火) 03:27:15Each of the operators < (less than), > (greater than), <= (less than or equal to), and >=
(greater than or equal to) shall yield 1 if the speci?ed relation is true and 0 if it is false.
90)
The result has type int.
0030デフォルトの名無しさん
2007/10/30(火) 03:27:17そういう感覚はキライじゃないw
でも、if の後には WS がほしい+丸括弧の中の WS はない方が好き。
個人的な感覚。押し付ける気全くなし。
0031デフォルトの名無しさん
2007/10/30(火) 03:30:03> if(変数 = NULL)
> が引き起こすバグをどうやって見つけるのか考えた事がある?ない?
(彼はコンパイラが警告を出してくれる事を知らなかった!)
これが総攻撃の的にされたため、敵から的をそらすために
!strcmp がどうのこうの、性の数がどうの負の数がどうの、符号がどうのと
話をややこしくして陽動作戦に転じたワケだ。
0032デフォルトの名無しさん
2007/10/30(火) 03:33:34変更されるかどうかは問題ではない。
作った人が、「0より大きい数」と言ってるのだから、「0より大きい数」かどうかを調べれば良いじゃないかと。
いちいち、「0より大きい数」というのを「正の数」と読み直す必要は無いだろ。
むしろどうしてわざわざ、「0より大きい数」を「正の数」と読み直す必要がある?
もし無いなら、「0より大きい数」でいいだろ。
0033デフォルトの名無しさん
2007/10/30(火) 03:34:31君の「代用」という言葉の使い方はどんなの?
0034デフォルトの名無しさん
2007/10/30(火) 03:39:46true のとき 1 を返して、false のとき 0 を返し、
その型はintだ、と書いてあるな。
ということは、Cは論理型を整数型で代用しているってことだな。
0035デフォルトの名無しさん
2007/10/30(火) 03:41:02私の持っているC言語の本には、strcmpは正と負と0を返すと書いているし
VisualStudio6.0のMSDNにも、正と負と0を返すとあるのだが
そして、そこには、数とは書いては居ない
最新のMSDNでは、< 0、0、> 0となっていて、0より大きい、0、0より小さいと書かれてはいても数とは書いてはいないのだが
0036デフォルトの名無しさん
2007/10/30(火) 03:42:24英語読めるんなら、>>29 読んでみ。
true のとき 1 を返して、false のとき 0 を返し、
その型はintだ、と書いてあるから。
0037デフォルトの名無しさん
2007/10/30(火) 03:44:13うん
それで「代用」の意味は?
0038デフォルトの名無しさん
2007/10/30(火) 03:46:01それは本がタコなんでしょう。
ISO/IEC 9899:TC2 には
> 7.21.4.2
> The strcmp function returns an integer greater than, equal to, or less than zero
と書いてありましたよ。
0039デフォルトの名無しさん
2007/10/30(火) 03:47:05true のとき 1 を返して、false のとき 0 を返してるのが代用。
それぞれの型が int であることも明記してある。
0040デフォルトの名無しさん
2007/10/30(火) 03:49:52そうじゃなくて
「代用」の意味が聞きたいんだけど
0041デフォルトの名無しさん
2007/10/30(火) 03:51:50->その物の代わりに用いること
0042デフォルトの名無しさん
2007/10/30(火) 03:52:250043デフォルトの名無しさん
2007/10/30(火) 03:57:43数字の0ではなく、zeroと書かれているから、それは、正数や負数の基準点としてのゼロじゃないの?
もし、マジックナンバーとしての0であれば、>>29の様に数字で0と表記するはずだよ
0044デフォルトの名無しさん
2007/10/30(火) 03:59:11Integer と書いてあるが。
0045デフォルトの名無しさん
2007/10/30(火) 04:00:39intは『特に指定の無い限り』符号付であるから
0、正、負ではなく>38なのだろうと。
#でもintが符号無しの場合でも正しく判定できるもんなのか…?
0047デフォルトの名無しさん
2007/10/30(火) 04:01:380048デフォルトの名無しさん
2007/10/30(火) 04:04:36さあ、その可能性もあるかもな。
だけど、正数としたいなら正数と、負数としたいなら負数と直接書けばいいわけで、
zero よりも 大きいか 等しいか 未満な 整数が返ります、
なんてわざわざ書くかなという気もする。
でもどっちにしろ、!strcmp と書くことのいいわけにはならないんだけどね。
0049デフォルトの名無しさん
2007/10/30(火) 04:05:34符号なしで、0より小さい判定をどうするのかは非常に知りたい
恐らく、それが、0より大きい、0より小さいつう微妙な表現の元なんだろう
0050デフォルトの名無しさん
2007/10/30(火) 04:13:14>ISO9899を見ているとnegativeとかnonnegativeという語が
>ひっきりなしに出てくるんですがこれは何を意味するとお考えでしょうか。
>signed と unsigned の違いは何ですか?
0051デフォルトの名無しさん
2007/10/30(火) 04:17:23#include <stdlib.h>
#include <string.h>
int Hage(){return 1;}
int Hoge(){return 2;}
int Fuga(){return 3;}
int main(int ac, char **av){
char *str1 = "hage";
char *str2 = "hog";
char *str3 = "fu";
int a = strcmp(str1, str2);
int b = strcmp(str2, str1);
int c = strcmp(str1, str3);
int d = strcmp(str3, str1);
printf("%d, %d, %d, %d", a, b, c, d);
if(a < 0){
Hage();
}else if(a > 0){
Hoge();
}else{
Fuga();
}
return 0;
}
$ ./strcmp
-14, 14, 2, -2
0052デフォルトの名無しさん
2007/10/30(火) 04:19:12movl -28(%ebp), %eax
movl %eax, 16(%esp)
movl -24(%ebp), %eax
movl %eax, 12(%esp)
movl -20(%ebp), %eax
movl %eax, 8(%esp)
movl -16(%ebp), %eax
movl %eax, 4(%esp)
movl $LC3, (%esp)
call _printf
cmpl $0, -16(%ebp)
jns L13
call _Hage
jmp L14
L13:
cmpl $0, -16(%ebp)
jle L15
call _Hoge
jmp L14
L15:
call _Fuga
L14:
movl $0, %eax
leave
ret
0053デフォルトの名無しさん
2007/10/30(火) 04:25:20zeroはfalse、falseはzero。
これは合ってる?
0054デフォルトの名無しさん
2007/10/30(火) 04:27:403ページ目に 「 Contents 」 という単語が出てくるが、
だからといって、「 Contents 」 という単語がC言語的に意味を持っているわけではない。
negative も 数学的な意味で出てきたのでしょう。
>signed と unsigned の違いは何ですか?
とりうる値の範囲が違う。
>If the value of an object of type char is treated as a signed integer when used in an
>expression, the value of CHAR_MIN shall be the same as that of SCHAR_MIN and the
>value of CHAR_MAX shall be the same as that of SCHAR_MAX.
ここでもあえて、正とか負とかいう言葉は避けてる感じだね。
0055デフォルトの名無しさん
2007/10/30(火) 04:29:13アセンブラとか出してくる時点でもう終わってる。処理系依存じゃん。
0056デフォルトの名無しさん
2007/10/30(火) 04:33:32ture (nonzero) と書いてあるから、
少なくとも (意味の上でのtrue) は (実装でのnonzero) なのは確か。
だけど、(実装でのnonzero) が (意味の上でのtrue) であるかはわからないんじゃない?
0057デフォルトの名無しさん
2007/10/30(火) 04:35:090058デフォルトの名無しさん
2007/10/30(火) 04:37:34Borland C++5.5.1とTurbo C++3.1 for Windowsでコンパイルすると、結果は-14, 14, 2, -2になったけどね
0059デフォルトの名無しさん
2007/10/30(火) 04:39:51nonzero(true)もあるよ
0060デフォルトの名無しさん
2007/10/30(火) 04:40:48gcc
0061デフォルトの名無しさん
2007/10/30(火) 04:43:34> The functions in this subclause return nonzero (true) if and only if the value of the
> argument c conforms to that in the description of the function.
たしかにあるが、この場合の nonzero は true の意ですよってだけだな。
0062デフォルトの名無しさん
2007/10/30(火) 04:43:390063デフォルトの名無しさん
2007/10/30(火) 04:44:31間違ってるんじゃね
0064デフォルトの名無しさん
2007/10/30(火) 04:44:510065デフォルトの名無しさん
2007/10/30(火) 04:45:21Cで
switch(strcmp(s1, s2)){
case 0:
hage;
case <0:
fuga;
case >0:
hoge;
}
みたいな書き方ってどうすればいいのですか?
0066デフォルトの名無しさん
2007/10/30(火) 04:46:29できません
0067デフォルトの名無しさん
2007/10/30(火) 04:47:09出来ない
>>64
逆裏対偶勉強すれば?
0068デフォルトの名無しさん
2007/10/30(火) 04:47:39じゃあこれが成り立つためには
>ture (nonzero) と書いてあるから、
理由がこれだけじゃ足りないでしょ
0069デフォルトの名無しさん
2007/10/30(火) 04:49:01if(strcmp(s1, s2) > 0){
hage;
} else if (strcmp(s1, s2) < 0){
fuga;
} else {
hoge;
}
0070デフォルトの名無しさん
2007/10/30(火) 04:50:19たりないから >>34 をあげる。
0071デフォルトの名無しさん
2007/10/30(火) 04:50:35Ruby なら出来るよ
0072デフォルトの名無しさん
2007/10/30(火) 04:51:57それだと strcmp(s1, s2)>0 のときに hage; しか実行されないぞ
0073デフォルトの名無しさん
2007/10/30(火) 04:53:282回呼んでるよ
0074デフォルトの名無しさん
2007/10/30(火) 04:55:40s1==s2 となる確立が低いから、条件分岐端折って最後に持ってきているのは良いが、
正直、strcmp呼び出しの重さに比べたら、分岐なんてなんでもない。
int ret = strcmp(s1, s2);
if(ret > 0){
hage;
} else if (ret < 0){
fuga;
} else {
hoge;
}
どうせならこう書けば良いのに。
0075デフォルトの名無しさん
2007/10/30(火) 04:56:05if(strcmp(s1, s2) == 0){ hage; fuga; hoge; }
if(strcmp(s1, s2) < 0){ fuga; hoge; }
if(strcmp(s1, s2) > 0){ hoge; }
0076デフォルトの名無しさん
2007/10/30(火) 04:57:28いらない
0077デフォルトの名無しさん
2007/10/30(火) 04:58:330078デフォルトの名無しさん
2007/10/30(火) 04:59:32新しいネタを提供してください
0079デフォルトの名無しさん
2007/10/30(火) 05:00:58str.equals("hoge")
ってなんなの?
すげー下手っぽく見える
0080デフォルトの名無しさん
2007/10/30(火) 05:01:17という書き方について、おまいらどう思う?
0081デフォルトの名無しさん
2007/10/30(火) 05:01:49そのネタはもうやった
0082デフォルトの名無しさん
2007/10/30(火) 05:02:13それへの安全対策だろ
0083デフォルトの名無しさん
2007/10/30(火) 05:04:12>true のとき 1 を返して、false のとき 0 を返し、
>その型はintだ
この1や0はマジックナンバーだよ
0084デフォルトの名無しさん
2007/10/30(火) 05:06:080085デフォルトの名無しさん
2007/10/30(火) 05:14:26マジックナンバーだったら何か問題があるの?
0086デフォルトの名無しさん
2007/10/30(火) 05:21:240087デフォルトの名無しさん
2007/10/30(火) 05:22:19どう問題があるか、論理的かつ完結に記述して
0088デフォルトの名無しさん
2007/10/30(火) 05:32:220089デフォルトの名無しさん
2007/10/30(火) 08:12:530090デフォルトの名無しさん
2007/10/30(火) 08:21:45それもやった
0091デフォルトの名無しさん
2007/10/30(火) 08:59:190092デフォルトの名無しさん
2007/10/30(火) 10:18:360093デフォルトの名無しさん
2007/10/30(火) 10:38:350094デフォルトの名無しさん
2007/10/30(火) 10:56:030095デフォルトの名無しさん
2007/10/30(火) 11:09:570096デフォルトの名無しさん
2007/10/30(火) 11:26:33まともな理由なんてないから、defaultを付けなくてもいいよ
0097デフォルトの名無しさん
2007/10/30(火) 11:26:58ただし、値の範囲チェックは事前にしっかりやっとけ。
0098デフォルトの名無しさん
2007/10/30(火) 11:59:450099デフォルトの名無しさん
2007/10/30(火) 12:08:38アホの子はおまえだ 自分の書いた綴りをよくよく見てみろ
0100デフォルトの名無しさん
2007/10/30(火) 12:13:46「無限ループではかならずwhile(1)を使え!
それ以外のループでは必ずforを使え!」
ってなことを言っていたのですがどうでしょう。
皆さんはそもそも無限ループを使いますか?
0101デフォルトの名無しさん
2007/10/30(火) 12:16:15どっちでもいい
最適化によってどちらも似たような、あるいは全く同じコードになる。
while (1) の方が読みやすいかも。
0102デフォルトの名無しさん
2007/10/30(火) 12:21:02わたしもfor(;;)だと落ち着かないので、while(1)を使ってます。
0103デフォルトの名無しさん
2007/10/30(火) 12:25:170104デフォルトの名無しさん
2007/10/30(火) 12:27:02合ってる。
0105デフォルトの名無しさん
2007/10/30(火) 12:32:108とか80とか256とは違う。
2や3だって、場合によってはマジックナンバーとは言えない。
0106デフォルトの名無しさん
2007/10/30(火) 12:32:29あと、警告: 論理が常に真だろヴォゲ が出たらイヤだな
0107デフォルトの名無しさん
2007/10/30(火) 12:47:01そういう場合は
こんなコンパイラは嫌だ!7行目
http://pc11.2ch.net/test/read.cgi/tech/1193443676/
0108デフォルトの名無しさん
2007/10/30(火) 12:53:510109デフォルトの名無しさん
2007/10/30(火) 12:57:51来てくれれば勝手にファビョってくれると思うよ
0110デフォルトの名無しさん
2007/10/30(火) 12:58:110111デフォルトの名無しさん
2007/10/30(火) 13:02:16性格歪んでるねあの馬鹿は。
おっと1時になった午後の仕事だ。
0112デフォルトの名無しさん
2007/10/30(火) 13:04:09匂うぞ、お前
0113デフォルトの名無しさん
2007/10/30(火) 13:25:220114デフォルトの名無しさん
2007/10/30(火) 13:33:290115デフォルトの名無しさん
2007/10/30(火) 15:38:16あなた方は迷信にまみれていませんか?
0116デフォルトの名無しさん
2007/10/30(火) 15:48:33合ってないよ。
意味の上でtrueと言った場合は、必ずnonzeroだが、
nonzeroのときは、意味の上で必ずしもtrueを表しているとは言えない。
逆裏対偶を勉強しなおせ。
0117デフォルトの名無しさん
2007/10/30(火) 15:49:09オレだけかYO!w
0118デフォルトの名無しさん
2007/10/30(火) 16:19:13> nonzeroのときは、意味の上で必ずしもtrueを表しているとは言えない。
例えば?
0119デフォルトの名無しさん
2007/10/30(火) 16:24:12整数型を整数の意味で使っている場合。
0120デフォルトの名無しさん
2007/10/30(火) 16:25:310121デフォルトの名無しさん
2007/10/30(火) 16:25:47「真はzeroではない」のに
「zero」でなければ「真」ではない
とでも言うのですか?
0122デフォルトの名無しさん
2007/10/30(火) 16:29:42リンゴは果物ですが、
果物はリンゴではないです。
int i; と書いたとき、
iはintですが、intはiではありません。
あなたはバカですが、バカは全てあなたというわけではありません。
私は人間ですが、人間は全て私というわけではありません。
0123デフォルトの名無しさん
2007/10/30(火) 16:30:590124デフォルトの名無しさん
2007/10/30(火) 16:37:38数学の論理学を完全に無視してやがる
0125デフォルトの名無しさん
2007/10/30(火) 16:46:04数学の論理学をどう無視しているか、的確に指摘してみて
0126デフォルトの名無しさん
2007/10/30(火) 16:47:590127デフォルトの名無しさん
2007/10/30(火) 16:50:40「AならばB」
だからといって
「BならばA」
だとは限らない
ってのは、数学の基礎だろ。
逆裏対偶って、たしか高校数学で習うんだったっけか?
0128デフォルトの名無しさん
2007/10/30(火) 16:53:39その幼児性に吐き気。
0129デフォルトの名無しさん
2007/10/30(火) 16:55:500130デフォルトの名無しさん
2007/10/30(火) 16:56:16そういうのを世の中では「トンでも」と言う。
0131デフォルトの名無しさん
2007/10/30(火) 16:56:54お前、いろんなスレでどうでもいいレス量産してるだろ。
自重しろ。
0132デフォルトの名無しさん
2007/10/30(火) 16:59:08他のスレに書き込むと迷惑だろうからな。
それよりも、俺の書き込みをわざわざ他スレにコピペしたやつこそ自重すべき。
0133デフォルトの名無しさん
2007/10/30(火) 17:01:11お前、本当にそんなことここで話したいのかよ
0134デフォルトの名無しさん
2007/10/30(火) 17:03:01話すというより、知っておかなきゃ議論にならないだろ。
0135デフォルトの名無しさん
2007/10/30(火) 17:04:020136デフォルトの名無しさん
2007/10/30(火) 17:06:05条件が全く違います
「真はzero以外」なのですから、「真であるためには、zero以外でなければならない」
つまり、「zeroであれば真では無い」と言えます
同様に、「真であればzeroでは無い」と言えます
よって、「zeroでなければ真である」と言えます
0137デフォルトの名無しさん
2007/10/30(火) 17:07:29nonzero が true だということを言ってしまうのは、数学の基礎ができてない証拠だろ。
nonzero は true の意味で使われることもあるが、そうでない場合もある。
0138デフォルトの名無しさん
2007/10/30(火) 17:08:09その「議論」とやらは、何を目指してるんだ?
0139デフォルトの名無しさん
2007/10/30(火) 17:14:19int i = 0;
if (i){
i = 0;
} else {
i = 1;
}
上のコードで、iはどうなるの?
0140デフォルトの名無しさん
2007/10/30(火) 17:17:34取り敢えず、それは、nonzeroがtrueで無いことを証明しなければ納得してもらえないだろう
0141デフォルトの名無しさん
2007/10/30(火) 17:20:17お願いだから、数学やり直して。
>「真はzero以外」なのですから、
↑これを命題だと考える
>「真であるためには、zero以外でなければならない」
↑真であることは、zero以外の十分条件である、ということを言葉に直したもの。
↑つまり、命題を言いなおしたに過ぎない。
>つまり、「zeroであれば真では無い」と言えます
↑これは命題の対偶。命題が成り立つのなら、その対偶も成り立つので、これはOK。
>同様に、「真であればzeroでは無い」と言えます
↑真であることは、zero以外の十分条件である、ということを言葉に直したもの。
↑またまた命題を違う言葉で言いなおしたに過ぎない。
>よって、「zeroでなければ真である」と言えます
↑これは命題の逆。命題が正しいからといって、常にその逆が成り立つとは限らない。
0142デフォルトの名無しさん
2007/10/30(火) 17:24:10まず int 型の i が 0 で初期化される。
つぎに、i が 0 以外なら i に 1 が代入され、
そうでないなら、i に 0 が代入される。
>>140
整数型を整数の意味で使った場合、nonzero は true ではないかもしれない。
0143デフォルトの名無しさん
2007/10/30(火) 17:27:22>つぎに、i が 0 以外なら i に 1 が代入され、
>そうでないなら、i に 0 が代入される。
ごめん間違った ↓ に訂正
まず int 型の i が 0 で初期化される。
つぎに、i が 0 以外なら i に 0 が代入され、
そうでないなら、i に 1 が代入される。
0144KY
2007/10/30(火) 17:27:500145デフォルトの名無しさん
2007/10/30(火) 17:28:16対偶:「BでないならAでない」
逆:「BならばA」
裏:「AでないならBでない」
対偶の場合とは異なり、元の命題「AならばB」が正しくとも
逆や裏は必ずしも正しいとは限らない(逆は必ずしも真ならず)。
しかし、逆命題「BならばA」の対偶は「AならばB」の裏「AでないならBでない」
と一致するので、 逆「BならばA」と裏「AでないならBでない」の真偽は必ず一致する。
from wikipedia
0146デフォルトの名無しさん
2007/10/30(火) 17:32:04> 整数型を整数の意味で使った場合、nonzero は true ではないかもしれない。
整数型の意味とやらに左右されず、真偽値として定まるのが「nonzeroはtrue」なのでは?
0147デフォルトの名無しさん
2007/10/30(火) 17:34:34char str[256] = "";
if (str) {
strcpy(str, "Hello!");
} else {
printf("error!\n");
}
ではこれは?
0148デフォルトの名無しさん
2007/10/30(火) 17:37:58つまりは、「zeroでなければ真である」
ということを言うためには、
「真でないならzeroである」
ということを言わなきゃいけないんだよね。
真でない場合を考えると、整数の 1 や 2 は、真ではないけど 0 でもない。
なので、「真でないならzeroである」 は 成り立たないし、
どうように、「zeroでなければ真である」 も成り立たない。
0149デフォルトの名無しさん
2007/10/30(火) 17:40:15int i = 10;
if (i){
i = 0;
} else {
i = 1;
}
上のコードで、iはどうなるの?
0150デフォルトの名無しさん
2007/10/30(火) 17:40:54ここんとこkwsk
0151デフォルトの名無しさん
2007/10/30(火) 17:43:16>整数型の意味とやらに左右されず、真偽値として定まるのが「nonzeroはtrue」なのでは?
その 「 nonzero は true 」 が誤りなのでは?
例えば、if 文は式を取って、その式の結果が、0以外 か 0 かで分岐する。
わざわざ式の真偽を考える必要はないし、nonzero を true と捉える必要も無い。
0152デフォルトの名無しさん
2007/10/30(火) 17:46:09!は真偽値を扱いたいという素直な表れでは?
0153デフォルトの名無しさん
2007/10/30(火) 17:46:37まず、256 の大きさの char 型の配列 str を "" で初期化する。
つぎに、str が 0以外 なら、str に "Hello!" をコピーし、
そうでないなら、標準出力に "error!\n" を出力する。
0154デフォルトの名無しさん
2007/10/30(火) 17:50:16strは0にならねぇよ
0155デフォルトの名無しさん
2007/10/30(火) 17:50:40まず int 型の i が 0 で初期化される。
つぎに、i が 0 以外なら i に 0 が代入され、
そうでないなら、i に 1 が代入される。
>>150
C言語において、整数の 1 や 2 の真偽を問う必要性が無い。
例えば、if文は、0と比べてどうか、という価値観で分岐しているだけであって、
真偽で分岐しているわけではない。
0156デフォルトの名無しさん
2007/10/30(火) 17:54:480157デフォルトの名無しさん
2007/10/30(火) 17:55:56もとの式が論理値を意味しているのなら、「!」を使えばよい。
もとの式が論理値を意味していないのなら、わざわざ「!」を使う必要も無い。
その意味で「わざわざ式の真偽を考える必要はないし、nonzero を true と捉える必要も無い。」
と書いた。
0158デフォルトの名無しさん
2007/10/30(火) 17:56:48論理値として期待される。整数として扱う必要性が無い。
例:
int b = (1 != 0);
0159デフォルトの名無しさん
2007/10/30(火) 17:57:020160デフォルトの名無しさん
2007/10/30(火) 17:57:03strは配列だから0になることはないね。
だけど、それはコードを書いた人に文句言ってよ。
0161デフォルトの名無しさん
2007/10/30(火) 17:58:020162デフォルトの名無しさん
2007/10/30(火) 17:59:02「文字列リテラルで初期化されているから」では?
0163デフォルトの名無しさん
2007/10/30(火) 18:00:020164デフォルトの名無しさん
2007/10/30(火) 18:05:59ISO/IEC 9899:1999 6.5.3.3 の 5 に誰も触れないところがry
0165デフォルトの名無しさん
2007/10/30(火) 18:06:33辞めようと〜の方が書きやすい。辞めようとまでは思ってないけど。
0166デフォルトの名無しさん
2007/10/30(火) 18:12:060167デフォルトの名無しさん
2007/10/30(火) 18:14:16なぜ、if文でエラーとなりコンパイルできないと答えずに、全ての設問の動作を回答したのでしょうか?
あなたの理屈で言うと、int i = 0;以外は、0以外であるが真では無いので、コンパイルされてはおかしいのでは無いでしょうか?
iは、int型であり、その値は10です
strは、str[0]のポインタであり、その値はstr[0]のアドレスです
どちらも、あなたの言う、0以外であるが真では無い物なのですが...
0168デフォルトの名無しさん
2007/10/30(火) 18:15:58ニートでしかも性格が悪いので相当他人に触れる事に飢えていると思われ
0169デフォルトの名無しさん
2007/10/30(火) 18:21:11真偽値を表している整数値は、真偽値のまま扱うべきだと言っているが。
>>149 のような書き方はC言語の仕様上、動くというだけで、やるべきではないし、
やるひつようもない。
C言語では、意味の上での真偽値は、必要とあらばいつでも整数値に格下できるというだけ。
0170デフォルトの名無しさん
2007/10/30(火) 18:25:08機能上、if文は、式が、0でないか、0と等しいか、を見るだけだから。
真偽を判定しているわけではない。
だから仕様上は動く。ただそれだけ。
0171デフォルトの名無しさん
2007/10/30(火) 18:25:120172デフォルトの名無しさん
2007/10/30(火) 18:26:20このスレの人達はそうするらしいよ。
理由は「コンパイルが通るから」だってさ。
動きゃ味噌も糞もいっしょなんだよ。
0173デフォルトの名無しさん
2007/10/30(火) 18:28:21それは貴方の主張は間違っていると認めると言うことでしょうか?
それとも、全てのコンパイラはISOの規格を正しく実装していないと言うことでしょうか?
0174デフォルトの名無しさん
2007/10/30(火) 18:31:05単に動けばそれで良い、というなら、
「ヘタだなぁ」と思うコードも、
コンパイルはとおるのだろうし、一応は動くのだろうから、
このスレの趣旨と反します。
ここは、コンパイル出来る出来ないを議論する場所では有りません。
0175KY
2007/10/30(火) 18:32:250176デフォルトの名無しさん
2007/10/30(火) 18:32:490177デフォルトの名無しさん
2007/10/30(火) 18:33:410178デフォルトの名無しさん
2007/10/30(火) 18:37:34現在、議題は、「真は0以外」で「0以外は真とは限らない」と言う主張は正しいのかどうかです
ですので、コンパイルエラーがでるでないでは無く
「真は0以外」で「0以外は真とは限らない」と言うのを証明して貰わなければならないのですが
少なくとも現時点の実装では、「0以外は真」として動作しているので、その見解を聞きたいのです
0179デフォルトの名無しさん
2007/10/30(火) 18:40:050180デフォルトの名無しさん
2007/10/30(火) 18:42:15>「真は0以外」
>「0以外は真」
規格上これらの両方が成立すると思ってる?
前者のみが成立すると思ってる?
後者のみが成立すると思ってる?
どちらも成立しないと思ってる?
0181デフォルトの名無しさん
2007/10/30(火) 18:44:08>「0以外は真」として動作している
動作していません。
if 文は 0でないか 0と等しいか、で分岐しているだけです。
真偽を評価しているわけでは有りません。
if 文に意味を持たせるのは、プログラマの役目です。
そうでなければ、if 文は単に 0でないか 0と等しいか で機械的に分岐するだけです。
0182デフォルトの名無しさん
2007/10/30(火) 18:44:23私は>>136が正しいと思います
0183デフォルトの名無しさん
2007/10/30(火) 18:45:420184デフォルトの名無しさん
2007/10/30(火) 18:46:56>>136 が 数学的に根拠が無いということは >>141 で示しました。
命題が正しいからといって、常にその逆が成り立つとは限りません。
0185デフォルトの名無しさん
2007/10/30(火) 18:48:15ifでの分岐の作動原理に、真偽がどうの、を期待するのが気に食わないと?
intで代用する文化の延長で、ifの動作原理を抽象化して、
それを真偽だとしてあつかう文化が気に食わないと?
0186デフォルトの名無しさん
2007/10/30(火) 18:51:00C++かdelphi使えよ
0187デフォルトの名無しさん
2007/10/30(火) 18:55:21>ifでの分岐の作動原理に、真偽がどうの、を期待するのが気に食わないと?
期待するのが正しい。
だから >>149 のような書き方をするのは良くない。
ただ、仕様上は、if 文は 0でないか、0と等しいか、で機械的に分岐するだけだから、
「真偽がどうの、を期待した書き方」、でなくても動いてしまう。
でもそういうの良くないよね、と。
0188デフォルトの名無しさん
2007/10/30(火) 18:55:27なぁおまいら、↑がfalseになるのはどう考えたら良い?
0189デフォルトの名無しさん
2007/10/30(火) 18:56:36>>141ではなにも証明されていません
「真はzero以外である」と言う命題において
「1であれば、真である」が、「真であれば、1である」というのであれば成り立ちません
「真はzero以外である」ので、ある時には「真は10である」かも知れないし、「真は'a'である」かもしれません
0190デフォルトの名無しさん
2007/10/30(火) 18:57:18環境にもよるのかもしれんが、シンプル。
!0が1になる。ので 2 == 1 はfalse。
0191デフォルトの名無しさん
2007/10/30(火) 19:01:12>「真はzero以外である」と言う命題において
>「1であれば、真である」が、「真であれば、1である」というのであれば成り立ちません
何言ってるの?
だれか一人でも、真であれば1である、なんて言ったのか?
真であればzero以外である、とは言ったが、1であるなんて限定した言い方は誰もしてないぞ。
0192デフォルトの名無しさん
2007/10/30(火) 19:01:31えっと、すまん携帯からなんで短く書きすぎた。
2は0以外で、!0は真だけど、異なるって言って良いの?って質問。
0193デフォルトの名無しさん
2007/10/30(火) 19:04:220194デフォルトの名無しさん
2007/10/30(火) 19:07:28話が噛み合って無いんじゃないかと。
プログラマはループが好きだしね。
0195デフォルトの名無しさん
2007/10/30(火) 19:07:29C言語の仕様上、真偽は本来「無い」。
論理型は整数型で代用されている。(根拠 >>34)
単なる整数値を真偽値として取り扱うのは、プログラマの責任。
0196デフォルトの名無しさん
2007/10/30(火) 19:08:58偽は0、真は0以外、で代用するが、
0が偽、0以外が真、は成り立たない。
0197デフォルトの名無しさん
2007/10/30(火) 19:11:44>「真は0以外」
>「0以外は真」
4つのうちどれ?
・規格上これらの両方が成立する
・前者のみが成立する
・後者のみが成立する
・どちらも成立しない
0198デフォルトの名無しさん
2007/10/30(火) 19:14:41しかし、意味の上での真偽値は有る。
意味の上での真偽値は、いつでも整数値に格下げすることができる。
逆に、整数値を、いつでも意味の上での真偽値として使っているとは限らない。
0199デフォルトの名無しさん
2007/10/30(火) 19:16:30>>182 は そうとう頭悪いからそんな難しいこと聞いてもわからないって。
突然、>>189 みたいな意味不明なことを言いだすやつだぜ。
質問の意味もわかってないんじゃね。
0200デフォルトの名無しさん
2007/10/30(火) 19:18:08ムカつかせるような書き方は自重しようぜ。
論破してもどうせ皆名無しだし、対人ゲームみたいなもんだ。
0201デフォルトの名無しさん
2007/10/30(火) 19:22:30かなり下手だと思う。
0202デフォルトの名無しさん
2007/10/30(火) 19:29:00>むしろ、propetyとmethodの単純な二元論で設計しようとする場合の弊害を気にすべきです。
C++の場合、その単純な二元論で設計しない弊害の方が、はるかにでかい気がするんだが・・・
0203デフォルトの名無しさん
2007/10/30(火) 19:29:21具体的な1要素としての「0以外」で話変わってくるんじゃね?
0204デフォルトの名無しさん
2007/10/30(火) 19:35:08同意。
あと逆にキャッチだけして無かったことにするやつ。
状況に応じてってのは分かるけど、
キャッチしてfalse返すだけとか、ちょっと待てって思う。
0205デフォルトの名無しさん
2007/10/30(火) 19:35:25それでは、「真はzero以外である」が成立しないだろ
zero以外が真でなければ、真は何なのか?
そんなの誰にも答えられないだろ
「真はzero以外である」と言う命題において
「1であれば真である」は成り立つ
「zeroであれば真ではない」も成り立つ
「真でなければzeroである」も成り立つ
しかし、
「真であれば1である」は成り立たない
同じく「真はzero以外である」と言う命題において
「コップであれば真である」は成り立つ
「zeroであれば真ではない」も成り立つ
「真でなければzeroである」も成り立つ
しかし、
「真であればコップである」は成り立たない
0206デフォルトの名無しさん
2007/10/30(火) 19:36:580207デフォルトの名無しさん
2007/10/30(火) 19:39:110208デフォルトの名無しさん
2007/10/30(火) 19:40:30「0以外」は集合です。
もし、具体的な1要素として「0以外」を見るのなら、
範囲の集合 S = { (0以外), (1以上3以下), (-3以外), (4だけ) }
といった見方も有ります。
しかし、0以外、という言葉が、
「0以外に含まれている具体的な1要素」
を表すことはありません。
02090
2007/10/30(火) 19:46:390210デフォルトの名無しさん
2007/10/30(火) 19:46:491行目の成立ってのをkwsk
C言語において「真はzero以外である」ってのは定義なんじゃねーの?
証明したりする類のことじゃない気がするんだが
0211210
2007/10/30(火) 19:48:52205だけ読んで理解しようとしてた
0212デフォルトの名無しさん
2007/10/30(火) 19:49:42まず、AであればBであるとき、
BであればAであるとは限らない、ということを理解すべき。
命題: 「真はzero以外である」、が成立するために、
逆: 「zero以外が真である」、が成立する必要は無い。
裏: 「真でなければzeroである」、も成立する必要は無い。
成立する必要があるのは、
対偶: 「zeroであれば真以外である」、だけ。
>「真はzero以外である」と言う命題において
>「1であれば真である」は成り立つ
なりたたない。
命題は、「真であればzero以外である」、と言っているだけで、
1 であれば 真 である、とは一言も言っていない。
1 は単なる 「1」 の意味かもしれない。
0213デフォルトの名無しさん
2007/10/30(火) 19:50:56こういうのは自分的にはOK。
public int safeInt(String str, int errorValue){
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
return errorValue;
}
}
キャッチして無かったことにするのはヘタでなくてバグだと思う。
0214デフォルトの名無しさん
2007/10/30(火) 19:51:49そうだよ
C言語に於いては「真はzero以外」であり、「zero以外なら真」だよ
特定の人だけ、「真はzero以外」だが「zero以外なら真」とは限らないと喚き散らしてるんだよ
もうね、zero以外であれば、文字型でも、整数でも、浮動小数点でも、真だって事が理解できないらしいんだ
だから、>>205みたいな証明じみた事をしなければならないのさ
0215デフォルトの名無しさん
2007/10/30(火) 19:56:51>C言語に於いては「真はzero以外」であり、「zero以外なら真」だよ
Cに限って言えばそれは無い。
zero以外の整数値を、真以外の意味で使うこともある。
だから「zero以外→真」は常に成り立たない。
数学上、常に成り立たつとは限らない命題は偽である。
>もうね、zero以外であれば、文字型でも、整数でも、浮動小数点でも、真
C言語には元々真も偽もない。
意味の上だけの真や偽が浮遊しているに過ぎない。
0216デフォルトの名無しさん
2007/10/30(火) 19:57:04特定の人とは要するにキチガイでお邪魔虫だろ
だからそういう人は無視すればいいんだよ
0217デフォルトの名無しさん
2007/10/30(火) 19:59:04何言ってんの?
評価は真だって話だろ?運用の話なんてしてねえよ。
0218デフォルトの名無しさん
2007/10/30(火) 19:59:081は単なる「1」かも知れないが、それは、zeroでは無い
つまり、「真はzero以外」であるならば、「1はzeroでは無いから真である」
そして、君が言う対偶というのは、「真であれば1である」と言うのが対偶だ
けして、命題を反対から読むことではない
0219デフォルトの名無しさん
2007/10/30(火) 20:02:19ああ、君は真偽以外の話もしてたの?
0220デフォルトの名無しさん
2007/10/30(火) 20:02:20いい加減に「逆は必ずしも真ならず」って理解してくれませんか?
あなた頭悪すぎですよ。
0221デフォルトの名無しさん
2007/10/30(火) 20:07:39上で書いた状況に応じてってのがまさにそれのことw
それは俺もOK。
>バグ
そういう仕様のメソッド、と言われると中々ね・・・。
最低でもログにスタックトレース出してくれないと泣ける。
0222デフォルトの名無しさん
2007/10/30(火) 20:09:370223デフォルトの名無しさん
2007/10/30(火) 20:10:18>1は単なる「1」かも知れないが、それは、zeroでは無い
↑これは正しい
>つまり、「真はzero以外」であるならば、「1はzeroでは無いから真である」
↑これはおかしい。
↑命題は 「真→zero以外」 とは言っているが、決して 「zero以外→真」 とは言っていない。
↑よって、「真はzero以外」 ということを根拠に、「1はzeroでは無いから真である」
↑ということを言うことは出来ない。
>そして、君が言う対偶というのは、「真であれば1である」と言うのが対偶だ
>けして、命題を反対から読むことではない
「真→zero以外」 の対偶は
「zero→真以外」 です。
だいたい「1」なんて言葉は一言も命題に使われていない。どっから出てきたのか。
勝手に数学の定義を変えないで。
0224デフォルトの名無しさん
2007/10/30(火) 20:10:59次のようなソースコードを見かけてしまった。
CHoge::CHoge()
{
m_hFileHandle = NULL;
}
void CHoge::Shori()
{
Close();
m_hFileHandle = CreateFile(……);
//処理
}
void CHoge::Close()
{
if (m_hFileHandle != NULL)
{
CloseHandle(m_hFileHandle);
m_hFileHandle = NULL;
}
}
これって、どう思う?
0225デフォルトの名無しさん
2007/10/30(火) 20:12:14ただ噛み合って無いって感じ。
それと、キチガイとか頭悪いとか言い出すのは負けだと思った方がいい。
0226デフォルトの名無しさん
2007/10/30(火) 20:13:18どちらも、ってのは両者の言い分のこと。
0227デフォルトの名無しさん
2007/10/30(火) 20:13:47規格上これは正しい?
0228デフォルトの名無しさん
2007/10/30(火) 20:14:14整数を評価した結果は「整数」でしかありません。
if 文は式が 0でないか、0と等しいか、に基づいて、機械的に分岐するだけです。
0229デフォルトの名無しさん
2007/10/30(火) 20:14:27いや、基地外にははっきりと基地外と言った方がいい
だって全然議論にもなってないじゃんこれ
0230デフォルトの名無しさん
2007/10/30(火) 20:14:44を偽と評価する事があるんだったら見てみたい。
0231デフォルトの名無しさん
2007/10/30(火) 20:15:50↑
↓←← →
→ → ↓
0232デフォルトの名無しさん
2007/10/30(火) 20:16:32真理値を意味する整数型を算術演算したり数値を意味する整数型を論理演算するのはヘタ。
これでいいじゃん。
0233デフォルトの名無しさん
2007/10/30(火) 20:17:18>>34 を 参照してください。
0234デフォルトの名無しさん
2007/10/30(火) 20:17:320235デフォルトの名無しさん
2007/10/30(火) 20:18:180236デフォルトの名無しさん
2007/10/30(火) 20:18:19君誰?
0237デフォルトの名無しさん
2007/10/30(火) 20:19:48↓はどういう意味?
> 同じく「真はzero以外である」と言う命題において
> 「コップであれば真である」は成り立つ
> 「zeroであれば真ではない」も成り立つ
> 「真でなければzeroである」も成り立つ
> しかし、
> 「真であればコップである」は成り立たない
「コップであれば真である」は成り立つ
って何よ。つーかコップがどうしたの? どっから出てきたの?
0238デフォルトの名無しさん
2007/10/30(火) 20:20:240239デフォルトの名無しさん
2007/10/30(火) 20:20:42いつもの人
0240デフォルトの名無しさん
2007/10/30(火) 20:21:22ヨロシクー
0241デフォルトの名無しさん
2007/10/30(火) 20:22:02屁理屈そのものだな
詭弁法だよ
詭弁の特徴のガイドライン
6:一見関係ありそうで関係ない話を始める
0242デフォルトの名無しさん
2007/10/30(火) 20:22:38で、コップは真なのですか?
コップはコップでしょ。
> 「コップであれば真である」は成り立つ
とか自分で書いてて、変だなぁとか思わなかったの?
0243デフォルトの名無しさん
2007/10/30(火) 20:22:49展開がおかしくないか?
まず「真はヤカン以外である」があって
「コップであれば真である」
が
「真であればコップである」とは限らない
というのなら解るんだけど。
0244デフォルトの名無しさん
2007/10/30(火) 20:24:48なんで俺に言ってるの?
俺は書いてないよ
書いた人に言ってね
0245デフォルトの名無しさん
2007/10/30(火) 20:26:36GOD is dead.
∴John Lennon is GOD.
0246デフォルトの名無しさん
2007/10/30(火) 20:26:45俺はよくそれやる。
でも俺自身は再オープンするコードは書かないw
あと、初期化子使った方が良い、というかCloseHandleするauto_ptr的なハンドル保持クラスを使う。
0247デフォルトの名無しさん
2007/10/30(火) 20:27:50読み飛ばしてたごめん。
if 文は 真偽を評価するわけではない。
ただ、0でないか、0と等しいか、で分岐するだけ。
>if( 0以外 )
は 0 と等しくないので、以降に続くブロックは実行される。
結局、0以外が「真」と評価された、かどうかまでは判らない。
C言語には元々真偽はなく、整数で代用されている。
C言語で言うところの真偽は、意味上のものでしかない。
0248デフォルトの名無しさん
2007/10/30(火) 20:29:07ごめんごめん、もうだれがだれだかわけわかめ
0249デフォルトの名無しさん
2007/10/30(火) 20:30:01そんなこと解りきっとるわ!
if(){
//真
}
else{
//偽
}
だって話してたんだろ今まで!!
0250デフォルトの名無しさん
2007/10/30(火) 20:30:220251デフォルトの名無しさん
2007/10/30(火) 20:32:49お疲れ
0252デフォルトの名無しさん
2007/10/30(火) 20:34:21が絡んでたのか。このぐっちゃりした議論の原因がわかった。
0253デフォルトの名無しさん
2007/10/30(火) 20:39:05そんな定義は何処にも無い。
if(exp){
/* expは0と等しくない */
}
else{
/* expは0と等しい */
}
というだけ。
ISO/IEC 9899:TC2 The if statement:
The ?rst substatement is executed if the expression compares unequal to 0.
In the else form, the second substatement is executed if the expression compares equal to 0.
意味の上で if(exp){ /* 真 */ } となるようにするのは、あくまでプログラマの責任。
0254デフォルトの名無しさん
2007/10/30(火) 20:43:49が真だからif statementに入るんでそ。
0255デフォルトの名無しさん
2007/10/30(火) 20:48:31の戻り値が1だから
0256デフォルトの名無しさん
2007/10/30(火) 20:48:33そう。だからexpが真か偽かは関係ないってこと。
0257デフォルトの名無しさん
2007/10/30(火) 20:48:52188で言いたかったことが伝わった気配w
抽象と具体でズレてるんじゃないかって。
0258デフォルトの名無しさん
2007/10/30(火) 20:49:38つまり、zeroでなければ真
1だろうと10だろうと'a'だろうと全部、真なんだよ
真で無い物はzeroだけなんだよ
じゃあzero出ない物は何なんだよ
0259デフォルトの名無しさん
2007/10/30(火) 20:51:46それは逆がたまたま真である場合だね
基本的にその使い方は間違ってるから
0260デフォルトの名無しさん
2007/10/30(火) 20:51:59expが真か偽かなんて話どっから沸いて来たの?
最初っから最後までずっとexp!=0の話だろ?
0261デフォルトの名無しさん
2007/10/30(火) 20:52:33>>254 がまたしても確信を突いた希ガス!
0262デフォルトの名無しさん
2007/10/30(火) 20:52:530263デフォルトの名無しさん
2007/10/30(火) 20:53:26「真はzeroじゃない」っていってんだよ
zeroで無い物はなにか答えろよ!
0264デフォルトの名無しさん
2007/10/30(火) 20:53:33抽象的(意味上)には真偽はある、と何度も何度も言ってるのだがなぁ。
そして、意味の上での真偽値は、いつでも整数値に格下げできると。
逆に、整数値を、意味の上での真偽値に格上げするのは、
ダウンキャストになるから、いつでも正しいとは限らないと。
0265デフォルトの名無しさん
2007/10/30(火) 20:54:30論理を無視して何をファビョってんの?
みっともないからやめなよ
0266デフォルトの名無しさん
2007/10/30(火) 20:55:02if(exp)
↑は↓
if(exp!=0)
こういう事?
0267デフォルトの名無しさん
2007/10/30(火) 20:56:22だから、「真はzeroじゃない」だろ
じゃ、zeroで無い物はなんなの?
ってずっと聞いてるんじゃん
要領得ない答えばかり言ってないで、バッシッと判りやすく答えてよ
0268デフォルトの名無しさん
2007/10/30(火) 20:57:03対偶なら答えてあげる。
「真ならzeroではない」の対偶は「zeroであれば真ではない」
0269デフォルトの名無しさん
2007/10/30(火) 20:57:150270デフォルトの名無しさん
2007/10/30(火) 20:57:57ああ、ブーリアン代数で話してたのね。
それは解った。というか解ってる。
書き方が下手だね。
>>188
は
!0は0以外を返すので2とは限らない。
0271デフォルトの名無しさん
2007/10/30(火) 20:58:37そんなことが知りたいんじゃないよ
「真はzeroじゃない」時の「zero出ない物が何なのか」知りたいんだよ
0272デフォルトの名無しさん
2007/10/30(火) 20:59:10>>264
> 逆に、整数値を、意味の上での真偽値に格上げするのは、
> ダウンキャストになるから、いつでも正しいとは限らないと。
「整数値を、意味の上で真偽値に格上げ」
これの意味がまず分からない。
例えば !strcmp の例なら、
「整数値は、意味の上でも整数値」であって、
void *p = NULL; if (!p) {}
の場合なら、
「ポインタ値(?)は、意味の上では整数値」であって、
どうにも、
「整数値を、意味の上での真偽値に格上げ」が見えてこない。
0273デフォルトの名無しさん
2007/10/30(火) 20:59:19つかjavaとかC++の話題振った人にレスしたの俺だけかよ。
0274デフォルトの名無しさん
2007/10/30(火) 20:59:31他の人に聞いて
0275デフォルトの名無しさん
2007/10/30(火) 21:00:28「true→nonzero」 だからといって
「nonzero→true」 が必ずしも成り立つとは限らない、って何度も言ってるだろ。
> 1だろうと10だろうと'a'だろうと全部、真なんだよ
1や10や'a'をどう捉えるかは、書き手や読み手に委ねられている。
場合によっては、trueを表しているかもしれないし、単に1や10や'a'ってだけかもしれない。
一方、true といったら、nonzero 以外は有りえない。
>じゃあzeroでない物は何なんだよ
単に「zeroでないもの」でいいだろ。
0276デフォルトの名無しさん
2007/10/30(火) 21:00:54http://pc11.2ch.net/test/read.cgi/tech/1051039126/
0277デフォルトの名無しさん
2007/10/30(火) 21:01:42誰も、「真がzeroじゃない」時の「zeroで無い物が何なのか」知らないのかよ!
0278デフォルトの名無しさん
2007/10/30(火) 21:02:31>!0は0以外を
そんなことは分かった上で投下してるんだよ・・・
0279デフォルトの名無しさん
2007/10/30(火) 21:03:25さっさと世の中の辛酸舐めた方がいいよ
0280デフォルトの名無しさん
2007/10/30(火) 21:05:07>「真がzeroじゃない」時の
多分君は『「真がzeroじゃなくてzeroじゃない物が真である」時の』で考えてるんだよね?
0281デフォルトの名無しさん
2007/10/30(火) 21:05:24昔提案したけど臆して回答出来なくなる奴が出るって却下されたの。
だから愚痴風味。
0282デフォルトの名無しさん
2007/10/30(火) 21:06:28だから if( !p ){} は本当は良くないんだよ。
だけど、0 の値を持ったポインタには特別な意味があるから、よしとされている。
一方整数の 0 には特別な意味は無い。
なので、if( !i ){} なんて書かない。
0283デフォルトの名無しさん
2007/10/30(火) 21:06:34説明になってねぇーよ
なんで成り立たないのかちゃんと説明しろよ
書き手とか、読み手とか、そんな物は、規格には書いてないだろうが勝手に作るな
「真がzeroじゃない」時の「zeroで無い物が何なのか」聞いてるんだよ
規格に書いてある事だけで説明しろよ
0284デフォルトの名無しさん
2007/10/30(火) 21:08:00nonzero
辞書をひけ
0285デフォルトの名無しさん
2007/10/30(火) 21:08:140286デフォルトの名無しさん
2007/10/30(火) 21:08:41「zeroでないもの」 は 「zeroでないなにか」 だよ。
zeroでない何かであれば何でも良い。
0287デフォルトの名無しさん
2007/10/30(火) 21:08:56ポインタの"0"は全ビット0とは限らないからな
0288デフォルトの名無しさん
2007/10/30(火) 21:10:23おそらくメダパニかと
0289デフォルトの名無しさん
2007/10/30(火) 21:10:59規格書の言葉を借りると、「0でないもの」 は nonzero である。
0290デフォルトの名無しさん
2007/10/30(火) 21:11:06「真がzeroじゃない」時が消えてるぞ
俺が知りたいのは「真がzeroじゃない」時の「zeroで無い物が何なのか」だってずっと聞いてるんだが
0291デフォルトの名無しさん
2007/10/30(火) 21:11:25コップでもいい?
0292デフォルトの名無しさん
2007/10/30(火) 21:11:36hoge(foo);
} else {
hoge(bar);
}
0293デフォルトの名無しさん
2007/10/30(火) 21:12:45> 一方整数の 0 には特別な意味は無い。
> なので、if( !i ){} なんて書かない。
この場合は、ifの整数的利用法として解釈し、
機械的に if ( ! (i == 0)) と読み替えれば、
真偽値を期待された整数であろうと、
そうでない整数であろうと、ともに真偽値として意味する。
0294デフォルトの名無しさん
2007/10/30(火) 21:12:45多分、
!0は0では無い。て言いたいんだろうと思うよ。
で!0はなにかっていうと!0でしかない。
で、たとえば1は!0かどうか考える時、
!0は1である可能性はあるけど、1とは限らない。
と言いたいんだろう。
君が聞きたい事とは全く違うベクトルで話してるからかみ合わないんだと思う。
0295デフォルトの名無しさん
2007/10/30(火) 21:14:10機械的に if ( ! (i != 0)) と読み替えれば、
0296デフォルトの名無しさん
2007/10/30(火) 21:15:10論理演算の結果は0か1だよ
0297デフォルトの名無しさん
2007/10/30(火) 21:16:090298デフォルトの名無しさん
2007/10/30(火) 21:18:15何言ってるんだ?
スレの流れ見ろよ
「真がzero以外」なのに、「zero以外は真じゃない」って言う流れなんだぞ
「真は!0」だが、「!0は真では無い」という流れだから
「真がzero以外」の時の「zero以外は一体何なのか」と聞いている
0299デフォルトの名無しさん
2007/10/30(火) 21:18:590300デフォルトの名無しさん
2007/10/30(火) 21:19:00解ってるよ。
だからかみ合ってないよ、って言ってるのに。
0301デフォルトの名無しさん
2007/10/30(火) 21:19:300302デフォルトの名無しさん
2007/10/30(火) 21:20:380303デフォルトの名無しさん
2007/10/30(火) 21:20:45【審議中】
|∧∧| (( ) ) (( ) ) ((⌒ )
__(;゚Д゚)___ (( ) ) (( ⌒ ) (( ) )
| ⊂l l⊃| ノ火.,、 ノ人., 、 ノ人.,、
 ̄ ̄|.|. .|| ̄ ̄ γノ)::) γノ)::) γノ)::)
|.|=.=.|| ゝ人ノ ゝ火ノ ゝ人ノ
|∪∪| ||∧,,∧ ||∧,,∧ || ボォオ
| | ∧ (´・ω・) (・ω・`) ∧∧
| | ( ´・ω) U) ( つと ノ(ω・` )
~~~~~~~~ | U ( ´・) (・` ). .と ノ
u-u ( ) ( ノ u-u
`u-u'. `u-u'
0304デフォルトの名無しさん
2007/10/30(火) 21:21:05俺に言うな、「真がzero以外」なのに、「zero以外は真じゃない」って言う奴等に言え
俺は、その事を話すのに疲れた
後は、奴等にその理由をちゃんと納得できるように問いただすだけだ
0305デフォルトの名無しさん
2007/10/30(火) 21:22:03「真がzeroじゃない」時の「そのzeroで無い物」 は対象です。
>>291
コップを持ってきたからといって、それが true になるかどうかはわかりません。
わかっているのは、true のときに、nonzero だということだけです。
「true → nonzero」 だからといって
「nonero → true」 だとは限らない、と何度言えばわかるのか。
0306デフォルトの名無しさん
2007/10/30(火) 21:23:29storyじゃなくてtalkingの方だよ
0307デフォルトの名無しさん
2007/10/30(火) 21:23:39お前もしつこいな。
聞いてる事に対する答えがずれてるっていうの。
ブーリアン代数の話してるんじゃねーってば。
0308デフォルトの名無しさん
2007/10/30(火) 21:24:17凄い知能だな……さすがだ
0309デフォルトの名無しさん
2007/10/30(火) 21:25:01ではあなたはそう書けば?
ヘタだなぁと言われるだろうけど。
単項演算子「!」は機能としては式を取とるが、
意味の上では論理値を取ることを期待されている。
それをそういう状態に保つのはプログラマの責任。
0310デフォルトの名無しさん
2007/10/30(火) 21:25:12答えになってない、前提が変わっている
あくまでも、「真がzeroじゃない」時、「zeroでない物が真で無いこと」を証明してもらわなければ納得できるわけが無いでしょう
0311デフォルトの名無しさん
2007/10/30(火) 21:25:15逆じゃないのか?
「nonzeroをtrueとして扱う(判断する)」
「zeroをfalseとして扱う」
のでは?
0312デフォルトの名無しさん
2007/10/30(火) 21:26:420313デフォルトの名無しさん
2007/10/30(火) 21:27:200314311
2007/10/30(火) 21:27:21zeroをfalseと扱うなら、対偶を取って
falseでない(trueなら)ば、zeroでない
0315デフォルトの名無しさん
2007/10/30(火) 21:28:30>「真がzero以外」なのに、「zero以外は真じゃない」って言う流れなんだぞ
>「真は!0」だが、「!0は真では無い」という流れだから
>「真がzero以外」の時の「zero以外は一体何なのか」と聞いている
「true → nonzero」 のとき、nonzero が何か特別な意味を持っていないといけないということは無い。
0316デフォルトの名無しさん
2007/10/30(火) 21:28:46古いコンパイラならね
0317デフォルトの名無しさん
2007/10/30(火) 21:29:17736 名前: デフォルトの名無しさん [sage] 投稿日: 2007/10/29(月) 16:56:11
- !strcmp
約278,000件中1 - 10件目(0.21 秒 )
http://www.google.com/codesearch?q=%21strcmp&hl=ja
- strcmp(・・・) == 0
約281,000件中1 - 10件目(0.23 秒)
http://www.google.com/codesearch?hl=ja&lr=&q=strcmp%5Cs*%5C%28%5B%5E%5C%29%5D%2B%5C%29%5Cs*%3D%3D%5Cs*0
- 0 == strcmp
約15,600件中1 - 10件目(0.17 秒)
http://www.google.com/codesearch?hl=ja&lr=&q=0%5Cs*%3D%3D%5Cs*strcmp
で意外と !strcmp が多いので、その心理を想像してみただけ。
0318デフォルトの名無しさん
2007/10/30(火) 21:31:08真がzeroじゃない時↑を成立させない為にはzeroでない物が真で無い例を示せばいい
0319デフォルトの名無しさん
2007/10/30(火) 21:32:02そうそうそれそれ
「nonzeroをtrueとして扱う(判断する)」
「zeroをfalseとして扱う」
という話と
「nonzeroを0以外として扱う(判断する)」
「zeroを0として扱う」
とした上でnonzeroは1ではないという話が混ざってる。
0320デフォルトの名無しさん
2007/10/30(火) 21:34:22????
>「真がzeroじゃない」時、「zeroでない物が真で無いこと」を証明してもらわなければ納得できるわけが無いでしょう
なに言ってるの? ついに壊れた?
「true → nonzero」 を証明するために、
「nonzero → non true 」 を証明するの?
もうわけ判らないのだが。
「nonzero → non true」 を証明したからといって、
「true → nonzero」 を証明したことにはならないのだが。
しかも、「nonzero → non true」 と 「true → nonzero」 は相反してるし。
0321デフォルトの名無しさん
2007/10/30(火) 21:34:30nonzeroに特別な意味があったとして、それがtrueで無いと言う根拠がない
>>318
そう言うこと
0322デフォルトの名無しさん
2007/10/30(火) 21:37:13お前が言ってるんだろうが
「真がzeroじゃ無い」時、「zeroは真とは限らない」と
だから、それを証明してくれよ
0323デフォルトの名無しさん
2007/10/30(火) 21:37:221とか2とか3とかを整数として使っている場合。
0324デフォルトの名無しさん
2007/10/30(火) 21:38:10前提が変わってるよ
0325デフォルトの名無しさん
2007/10/30(火) 21:38:24逆であるから特に証明の必要なし
0326デフォルトの名無しさん
2007/10/30(火) 21:38:32c言語のint型の返り値の型の関数でさ、
真か偽を返すって言われたら0かそれ以外だろうと直感的に分かるけど、
0かそれ以外を返すって言われても論理値だと言いたいのか分からない、
ってことじゃない?
0327デフォルトの名無しさん
2007/10/30(火) 21:39:49だから、なんで「真はzeroじゃ無い」が無くなるの?
0328デフォルトの名無しさん
2007/10/30(火) 21:40:34>nonzeroに特別な意味があったとして、それがtrueで無いと言う根拠がない
nonzero が trueでない根拠も無いが、一方で、trueである根拠も無い。
どちらともいえない。
だから、「nonzero → true」 は常に成り立つとは限らない。
ゆえに偽。
0329デフォルトの名無しさん
2007/10/30(火) 21:41:53他はどうよw?
0330デフォルトの名無しさん
2007/10/30(火) 21:42:38だから
「真がzeroじゃ無い」時、「zeroは真とは限らない」があるって言うんだろ
つまり、「真がzeroじゃ無い」時、「zeroは真では無い」場合があるんだろ?
じゃあ、「真がzeroじゃ無い」時、「zeroは真では無い」場合を証明してもらわないと
「真がzeroじゃ無い」時、「zeroは真とは限らない」は成立しないだろう
0331デフォルトの名無しさん
2007/10/30(火) 21:44:400332デフォルトの名無しさん
2007/10/30(火) 21:45:47> nonzero が trueでない根拠も無いが、一方で、trueである根拠も無い。
trueであるのには「true → nonzero」と言う立派な根拠があるのですが?
0333デフォルトの名無しさん
2007/10/30(火) 21:46:23>「真がzeroじゃ無い」時、「zeroは真とは限らない」
なんでこんな事を証明する必要がある?
まぁいいや。
「zeroは真とは限らない」
証明:
整数の意味で 0 を使っている場合、それは偽の意味で使っているわけではない。
まして、真の意味で使っていない。(zeroは真とは限らない)
整数の 0 の意味で使っていると本人が言っているのだから、
0 を整数の 0 の意味で使った場合、0 には整数の 0 以上の意味は無い。
0334デフォルトの名無しさん
2007/10/30(火) 21:46:45>>330は>>325宛だ...orz
0335デフォルトの名無しさん
2007/10/30(火) 21:47:410336デフォルトの名無しさん
2007/10/30(火) 21:48:070以外の整数は「論理値として考えた場合」に真になる。
で、「0以外」という言葉、表現そのものには真偽の意味は持っていない。
と、言いたいんだと思うが、どう?
0337デフォルトの名無しさん
2007/10/30(火) 21:49:07>>34
0338デフォルトの名無しさん
2007/10/30(火) 21:49:33そして、
ifなどの条件として指定され、
整数の比較 != 0 をされて始めて、
その比較の結果には真偽値としての意味がある、って主張?
0339336
2007/10/30(火) 21:49:400340デフォルトの名無しさん
2007/10/30(火) 21:50:28何が言いたいのか意味が判らないんだよ。
もっとわかりやすく言えよ。
1とか2とか3とかを整数として使っている場合、1や2や3はtrueの意味で使っているわけではない。
そういう「反例」があるために、
「 nonzero → true 」
は一般化できないの。つまり偽。
0341デフォルトの名無しさん
2007/10/30(火) 21:51:22if( exp != 0){
}
else{
}
においてexpが0以外で且つelseに飛ぶ値は何だ?
と聞いてるんだと思うんだけど。
0342デフォルトの名無しさん
2007/10/30(火) 21:53:19前提が変わってるよ
0343デフォルトの名無しさん
2007/10/30(火) 21:54:38整数の比較 intvalue != 0 をされて始めて、
その比較の結果には真偽値としての意味がある、って主張?
intvalueは整数であって、0であろうが1でも2でも3であっても真偽値ではない。
intvalue != 0の評価値は、真偽値である。
ってこと?
0344デフォルトの名無しさん
2007/10/30(火) 21:55:08C言語において、zero を true の意で使うことは無い。
命題に対する対偶の証明終わり。
>>332
「true → nonzero」といってるだけで、
「nonzero → true」とは言ってない。
だから、「true → nonzero」 だからといって、
nonzero が true かどうかは判らない。
0345デフォルトの名無しさん
2007/10/30(火) 21:55:26エエー
>>336とか見てよ。値の話じゃなくてさ、意味を含むとかの話なんだよ。
で、意味の一貫性の無い書き方はヘタっていう議題だと思うよ。
0346デフォルトの名無しさん
2007/10/30(火) 21:56:54どんぴしゃ。
0347デフォルトの名無しさん
2007/10/30(火) 21:57:40だからなんで、前提条件の「真はzeroじゃ無い」が無くなるの?
その「zero」は、整数であるか、浮動小数点であるか、文字であるか何も書いてないんだよ
なんで、あんたがそれを決められるの?
0349デフォルトの名無しさん
2007/10/30(火) 21:59:18>C言語において、zero を true の意で使うことは無い。
もしかして無いという証拠があるの?
0350デフォルトの名無しさん
2007/10/30(火) 21:59:50質問していい
「nonzero → falseでない」
は正しいのか?
0351デフォルトの名無しさん
2007/10/30(火) 22:00:35悪魔の証明ってご存知ですか?
0352デフォルトの名無しさん
2007/10/30(火) 22:01:02それは、expが0と等しいか等しくないか調べているだけであって、
expの真偽と関係ないじゃん。
0353デフォルトの名無しさん
2007/10/30(火) 22:01:58そうだよ。
だからズレてるって何回書けばいいんだろう。
・expが0と等しいか等しくないか
・exp自体の真偽
という二つが混ざってるんだってば。
0354デフォルトの名無しさん
2007/10/30(火) 22:04:06そんなことは無い。
if ( a >= 0 ) とかかれた場合、a >= 0 の評価結果は整数値だが、
意味の上では真偽値だ。いちいち !=0 と比較しなければならないということはない。
ただ、if( !a ) と書くのは変だろ。
ちゃんと if( a==0 ) と書けと。
0355デフォルトの名無しさん
2007/10/30(火) 22:05:42もちろん知ってるよ。
だから「もしかして」と言ってる。
0356デフォルトの名無しさん
2007/10/30(火) 22:05:45bool b=5; //警告が出る
int n=true; //出ない
0357デフォルトの名無しさん
2007/10/30(火) 22:05:50一般化するってのは、前提条件を外すから一般かなわけ。
一般化できないってのなら、一般的にいえないってことだから、
その命題は偽ってこと。
0358デフォルトの名無しさん
2007/10/30(火) 22:06:450359デフォルトの名無しさん
2007/10/30(火) 22:08:07if (n) {...}
else {...}
で、nが0以外のときにelseに入ったり
0のときにifに入ったりすることは無いだろうが
真偽値がどうこう言いたいなら!=0でもつけてろよ
0以外=真、0=偽として扱ってるんだと思ってたが
0360デフォルトの名無しさん
2007/10/30(火) 22:08:11nonzero が falseでない ことは有る。
反例)
整数の意味で1や2や3を使った場合、それは「falseでない」という意味で使った
わけではない。
0361359
2007/10/30(火) 22:08:500362デフォルトの名無しさん
2007/10/30(火) 22:10:35c++?
苦肉の策でNULLを型も無い"0"と定義しちゃったんだよね。
0363デフォルトの名無しさん
2007/10/30(火) 22:11:17Cでは「等価」
0364デフォルトの名無しさん
2007/10/30(火) 22:11:44int boolvalue; // 真偽値として使いたい整数
int intvalue; // 整数として使いたい整数
があるとき、ifなどの条件に intvalue を指定した時、
暗黙的に(?)内部で(?)整数の比較 intvalue != 0 をされて始めて、
その比較の結果には真偽値としての意味がある、って主張?
元のintvalueは整数であって、0であろうが1でも2でも3であっても真偽値ではない。
ifが分岐するためのintvalue != 0の評価値は、真偽値である。
ってこと?
0365デフォルトの名無しさん
2007/10/30(火) 22:11:44規格書レベルで、ture は nonzero だと書いてある。
true は nonzero であることの十分条件であり、
nonzero は true であることの必要条件。
nonzero でないなら true であることの必要条件を満たさない。
0366デフォルトの名無しさん
2007/10/30(火) 22:12:19前提条件を外したらだめだよ
0367デフォルトの名無しさん
2007/10/30(火) 22:15:38なんどもいうが、C言語に真偽値は無い。整数型で代用している。
if文も機能的に言えば、0と等しくないかどうかで分岐しているだけ。
C言語での真偽値は意味の上にしか存在しない。
true の意味で、nonzero を使ってます ってことは言えても、
nonzero のときは、常に true の意味だ、とは言えない。反例が出てくる。
0368デフォルトの名無しさん
2007/10/30(火) 22:17:51機能的には等価だが、意味の上での区別はつけるべきだ。
仕様書にも、「 true を返す 」 とかシレっと出てくる。
つまり、意味の上での true や false はあるってことだ。
機能的には無いが。
0369デフォルトの名無しさん
2007/10/30(火) 22:18:13下手なプログラムはソースから意味・意図が読み取り辛い。
だろ?
0370デフォルトの名無しさん
2007/10/30(火) 22:19:52nonzero (true) と false (zero) って記述もあるよ
あとだな、こんなのがあったんだが
7.21.4
1 The sign of a nonzero value returned by the comparison functions memcmp, strcmp,
and strncmp is determined by the sign of the difference between the values of the first
pair of characters (both interpreted as unsigned char) that differ in the objects being
compared.
ってかISOぐらいググればすぐみっかるんだから、読んでから話せよ
ttp://gad.glazov.net/cprog/iso9899-c99.pdf
0371デフォルトの名無しさん
2007/10/30(火) 22:20:37C言語には、真偽値は無い、という主張。
!=0と比較して初めて意味があるとか、そういうことではない。
if文は単に式を0と等しくないかどうかという基準で分岐するだけのもの。
真とか偽とかは関係ない。
真とか偽とかは、あくまでプログラマが付加するもの。
という主張。
0372デフォルトの名無しさん
2007/10/30(火) 22:21:15だから意味も「等価」
0373デフォルトの名無しさん
2007/10/30(火) 22:21:27下手いとからい。
カレーとか作(r
0374デフォルトの名無しさん
2007/10/30(火) 22:22:11それはお前の決めることではない。
一般的にいえなければ、その命題は偽。
数学的にそう決まっている。
特殊な条件を付け加えれば、どんな条件でも成り立つ。
それじゃ意味が無い。
0375デフォルトの名無しさん
2007/10/30(火) 22:22:34そして実行効率と保守性が高いのが良いプログラム
だな
0376デフォルトの名無しさん
2007/10/30(火) 22:23:33今さら?
0377デフォルトの名無しさん
2007/10/30(火) 22:25:26falseもnonzeroなら、確かに反例が出てくるな
0378デフォルトの名無しさん
2007/10/30(火) 22:26:14じゃこっちも前提外そう。
外した。
「trueはnonzeroじゃない」
0379デフォルトの名無しさん
2007/10/30(火) 22:26:25それは、true を nonzero で表現しているという、
特殊な条件において、一時的に「nonzero → true」 が成り立っているだけ。
一般的に「nonzero → true」 がいえるわけではない。
また、「true → nonzero」 の根拠として、「true (nonzero)」を挙げているわけではない。
「true → nonzero」 の根拠は >>34 や、
規格書のあちこちにでてくる、「true を 返す」 という表記。
0380デフォルトの名無しさん
2007/10/30(火) 22:27:14ちょww過去レスにgotoする気かw
0381デフォルトの名無しさん
2007/10/30(火) 22:28:21意味は等価ではない。
規格書でも、「nonzero を返す」という表現は使わず、「trueを返す」という表現が使われている。
もし区別しないのなら、nonzeroを返す、と書くべきだろ。
0382デフォルトの名無しさん
2007/10/30(火) 22:28:47ここまで頑張るなら、どの意見がアホの意見か分かったほうが、見ている人にとってもありがたい。
>>34
オペレータ'<'や'<'が1か0を返すって(型はint)のは書いてあるけど、それがbool型を意味するとは書いてないよ。
0<1が成立するとき、オペレータ'<'はint型の1を返すということしか書かれていません。
返された1or0がbool型を代用しているってのはどこに書いてあるのですか?
0383デフォルトの名無しさん
2007/10/30(火) 22:29:08審議t(
0384デフォルトの名無しさん
2007/10/30(火) 22:30:01それがどうしたの?
あってるじゃん。
0385デフォルトの名無しさん
2007/10/30(火) 22:30:580386デフォルトの名無しさん
2007/10/30(火) 22:31:57お前さんの方がアホの意見と思ってるのが、
最低2人、おそらく3人は居る模様。
0387デフォルトの名無しさん
2007/10/30(火) 22:32:06一般化するなら外していい前提と外したらいけない前提があるだろ
0388デフォルトの名無しさん
2007/10/30(火) 22:34:46if(nonzero)はelseに飛ばないでしょ?
nonzero→ifの中身を実行→真
zero→elseの中身を実行→偽
みたいな解釈でいいだろ。
別に実装に忠実に「0以外だから実行」と解釈しても
↑みたいに捉えて「真だから実行」でもどっちでもいい気が
0389デフォルトの名無しさん
2007/10/30(火) 22:35:14if文、while文、do〜while文、for文などの条件式を必要とする場合
その条件式は、スカラ型に限られます
条件式が真であると言うのは、条件式が0以外であることを言います
スカラ型には、整数型、浮動小数点型、文字型、ポインタ型があります
条件式として、使われる限り、整数だろうと浮動小数点だろうとポインタだろうと0以外であれば真です
そして、条件式にintやfloat等を利用することは合法です(floatをif文に使うのはどうかとは思うけどね)
0390デフォルトの名無しさん
2007/10/30(火) 22:36:05あってねーよ
0391デフォルトの名無しさん
2007/10/30(火) 22:37:17両者とも0か1を返すよ。
0392デフォルトの名無しさん
2007/10/30(火) 22:38:00とりあえず、<&;の戻り値に真偽の意味は含まれないって言う意見は異端過ぎるんじゃね?
反論に使う材料間違ってると思うよ。
0393デフォルトの名無しさん
2007/10/30(火) 22:38:39いや、そんな馬鹿は一人いれば十分だろ。
0394デフォルトの名無しさん
2007/10/30(火) 22:38:56なぜ「あえて」そう書いてあるかというと、
C言語が意味の上での真偽値を整数で代用する言語だから。
意味の上での真偽値は、いつでもどこでも整数値に格下げすることが出来る。
どこの段階で意味の上での真偽値が整数値に格下げされるか判らないから、
最初にzeroやnonzeroを生み出すところ以外には、
規格書には「0と比較します」としか書き様が無い。
最初にzeroやnonzeroを生み出すところの例は >>34
それから、関数の戻り値の定義で「true を 返します」ってのもある。
0395デフォルトの名無しさん
2007/10/30(火) 22:39:40「nonzeroを返す」と書かれてるよ
0396392
2007/10/30(火) 22:40:150397デフォルトの名無しさん
2007/10/30(火) 22:41:40だけど、ヘタだよね
0398デフォルトの名無しさん
2007/10/30(火) 22:43:48最低2人って書いた理由くらい分かれよw
馬鹿が2人も居るのか、みたいなレスなら分かるけどw
0399デフォルトの名無しさん
2007/10/30(火) 22:45:03ISO/IEC 9899:TC2 のどこに載ってる?
>>391
ではどうして1を返すって書かずにわざわざtrueを返すって書くんだ?
これは意味の上でのtrueが市民権を得てるってことだろ。
なんせ仕様書に出てくるんだからな。
0400デフォルトの名無しさん
2007/10/30(火) 22:45:38ISO/IEC 9899:1999 (E)だよね?
スマンけど教えてくれ。
0401デフォルトの名無しさん
2007/10/30(火) 22:45:49なるほど。
論理演算の結果や、真偽値として期待される整数さえも、
ifの条件においては、いずれもまた整数である、と。
0402デフォルトの名無しさん
2007/10/30(火) 22:46:25どこよ
0403デフォルトの名無しさん
2007/10/30(火) 22:47:200404デフォルトの名無しさん
2007/10/30(火) 22:48:52ISO/IEC 9899:TC2だよ
0405デフォルトの名無しさん
2007/10/30(火) 22:49:01ここ数日は、定数左、!strcmp、nonzero云々でお祭り騒ぎです。
0406デフォルトの名無しさん
2007/10/30(火) 22:50:117.4.1
0407デフォルトの名無しさん
2007/10/30(火) 22:50:56意味の上での論理値は、いつでもどこでも整数値に格下げできる。
意味の上での論理値を、整数に格下げせず、
意味の上での論理値のままなるべく扱うのはプログラマの責任という。
逆に、整数値を論理値の意味で見なすのは、これはダウンキャストをしているわけだから、
いつでも正しいとは言いがたい。
0408デフォルトの名無しさん
2007/10/30(火) 22:52:19元気で噛み合って無い2人が出会ったら祭勃発ですからw
0409デフォルトの名無しさん
2007/10/30(火) 22:54:03return nonzero (true)
と書いてありますが。
nonzero ですけど、true の意味ですよ ってことでしょ。
nonzero と true が真に等価なら、一々但し書きなんてしないよなぁ。
0410デフォルトの名無しさん
2007/10/30(火) 22:55:40>>407
C言語において、整数の 1 や 2 の真偽を問う必要性が無い。
!は真偽値を扱いたいという素直な表れでは?
BであればAであるとは限らない、ということを理解すべき。
真で無い物はzeroだけなんだよ
negative も 数学的な意味で出てきたのでしょう。
0411デフォルトの名無しさん
2007/10/30(火) 22:56:40ISO/IEC, Programming Languages -- C, 9899:1999, amended by ISO/IEC 9899:1999/Cor.1:2001
「真は0以外」なのだから、「1」と書くわけは無い、あくまでも、「true」もしくは「nonzero」
「1」は真であっても、真は「1」では無い
0412デフォルトの名無しさん
2007/10/30(火) 22:58:44>>410
あなたの理屈で言うと、int i = 0;以外は、0以外であるが真では無いので、コンパイルされてはおかしいのでは無いでしょうか?
ifでの分岐の作動原理に、真偽がどうの、を期待するのが気に食わないと?
「nonzero → non true 」 を証明するの?
だから、それを証明してくれよ
c言語のint型の返り値の型の関数でさ、
0413デフォルトの名無しさん
2007/10/30(火) 22:59:21c++最強とか言うつもり無いけど、あちらでは比較演算子はbool型に入る。
でもintからの暗黙のキャストは出来ない。
boolについてc++の方向性は分かるよな?
話題はcだけど、c++の考え方を指標にするのも悪くないだろ。
0414デフォルトの名無しさん
2007/10/30(火) 22:59:38ISO/IEC 9899:1999/Cor.2:2004(E)見てみたけど
どこにあるかわからなかった。
>>406
なんでここでctype?
0415デフォルトの名無しさん
2007/10/30(火) 23:00:12でも、なんとなく同一人物っぽいんだよな。
0416デフォルトの名無しさん
2007/10/30(火) 23:00:330417デフォルトの名無しさん
2007/10/30(火) 23:02:06でも関数の仕様上、1を返すことに決まってるなら、そう書けばよいだろ。
もしくは、非0を返すと書くか。
あえて、true を返すと記述するってことは、
true に意味があるってことだろ。
0418デフォルトの名無しさん
2007/10/30(火) 23:06:55そういうこと。
ちなみに俺はnonzeroという単語を使って無い。
そして>>200とか>>369が俺。
相手を本気でアホとは思ってないよw
もうちょっと気楽に話そうぜw
0419デフォルトの名無しさん
2007/10/30(火) 23:07:16・trueを返す
規格書では何か意図があって使い分けてると考えてる?
0420デフォルトの名無しさん
2007/10/30(火) 23:07:57typedef int bool;
ではなく、
class bool : public int {}; //←本当は出来ない。あくまで擬似コード。
だと。
bool は int だが、 int は 必ずしも bool でない。
0421デフォルトの名無しさん
2007/10/30(火) 23:09:21だから、nonzero を返すと書いてあるところを示せよ。
俺の見たところには、nonzero ( true ) と但し書きがあったぞ。
ちなみに、strcmp の戻り値は integer だと 書いてあった。
0422デフォルトの名無しさん
2007/10/30(火) 23:12:28その但し書きはnonzeroがtrueだって事。
0423デフォルトの名無しさん
2007/10/30(火) 23:23:31それは、
この関数の戻り値の nonzero は 限定的に true を意味しています、って但し書きでしかない。
つまり、一般的に「nonzero → true」 ということが言えないから、わざわざ但し書きが着いてる。
ということは、「nonzero → true」 は一般的には言えないってこと。
一方、trueの方は、何の但し書きもなく「true」だけ単体で出てくることが多い。
つまり、「true → nozero」 は一般的に言えることだから、但し書きがついてない。
0424デフォルトの名無しさん
2007/10/30(火) 23:24:44trueに但し書きついてるよ
0425デフォルトの名無しさん
2007/10/30(火) 23:26:15>「true」だけ単体で出てくることが多い。
とわざわざ書いてるだろ。
0426デフォルトの名無しさん
2007/10/30(火) 23:26:20trueは但し書きがついている場合にnonzeroということ。
0427デフォルトの名無しさん
2007/10/30(火) 23:30:06では、但し書きのついてない true は何ですか?
0428デフォルトの名無しさん
2007/10/30(火) 23:31:100429デフォルトの名無しさん
2007/10/30(火) 23:32:150430デフォルトの名無しさん
2007/10/30(火) 23:32:36C言語に真偽値はありません。
なにより、戻り値の型はintになってますよ。
trueを返すとは、一体どういうことなのでしょうね。
但し書きが無いということは、なにか暗黙の了解でもあるのかな?
0431デフォルトの名無しさん
2007/10/30(火) 23:37:580432デフォルトの名無しさん
2007/10/30(火) 23:38:37if、while、for、do〜whileに用いる条件式に於いてtrueであることが保証される
if、while、for、do〜whileに用いる条件式に於いて、trueとはnonzeroである
その条件式は、スカラ型に限られる
スカラ型には、整数型、浮動小数点型、文字型、ポインタ型がある
0433デフォルトの名無しさん
2007/10/30(火) 23:41:07> if、while、for、do〜whileに用いる条件式に於いてtrueであることが保証される
意味不明
0434デフォルトの名無しさん
2007/10/30(火) 23:42:550435デフォルトの名無しさん
2007/10/30(火) 23:44:150436デフォルトの名無しさん
2007/10/30(火) 23:46:00でも、関数の戻り値はintになってるんだよ。
その上で、なんの説明も無く、「trueが返る」とシレっと書いてあるわけだから、
trueがnonzeroであるということが一般的だということだろ。
0437デフォルトの名無しさん
2007/10/30(火) 23:48:56Cだけの話ならISO Cのスレがあるだろ。
0438デフォルトの名無しさん
2007/10/30(火) 23:48:59MSみたいにBOOLとか定義しとけば済む話じゃないか。
ヘタとか以前に、もっと考えることあるだろう。
0439デフォルトの名無しさん
2007/10/30(火) 23:49:150440デフォルトの名無しさん
2007/10/30(火) 23:51:12ISO Cのスレで聞け。
答えが聞ける。
0441デフォルトの名無しさん
2007/10/30(火) 23:52:04ヘタかどうかの話に立ち戻る気は無いの?
上の方でもあったけど、算術演算子は数値を意図するものに、
論理演算子は真偽値を意図するものに。
それを破ると分かり辛い、つまりヘタなソースになる。
というのは異論無いっしょ?
例えばc++ではオペレータオーバーロード絡みやイテレータの概念など、
1を返す・非0を返すなどより、もっと概念的な意図をコーディングする方向に進んでいる。
0442デフォルトの名無しさん
2007/10/30(火) 23:53:32どこにそんな頭の悪そうな文章が書いてあったのか知らないが、
6.8.5 Iteration statements
4 An iteration statement causes a statement called the loop body to be executed repeatedly
until the controlling expression compares equal to 0.
と書いてあるぞ。
0443デフォルトの名無しさん
2007/10/30(火) 23:53:44たとえばC++が出てくる辺り「悪食だな」と思う
0444デフォルトの名無しさん
2007/10/30(火) 23:57:110445デフォルトの名無しさん
2007/10/30(火) 23:58:56field
0446デフォルトの名無しさん
2007/10/31(水) 00:01:55ということは
while (strcmp(s1,s2))
{
}
は正しいわけか。
なんかぐだぐだ感。
0447デフォルトの名無しさん
2007/10/31(水) 00:04:18食わず嫌いは良くないぜ。
PHPやJavaも好きだけど、特定端末用のActiveX作るときとか
C++ATLマジオヌヌメだから。
最近は.NET使えるからC#でも良いけど。
0448デフォルトの名無しさん
2007/10/31(水) 00:05:21それが正しいということは、一人を除いてみんな知っているわけで。
ただ一人だけが喚いて、暴れて、集中砲火を浴びて、発狂しているだけです。
で、その結果として1日でスレが半分埋まるわけだw
0449デフォルトの名無しさん
2007/10/31(水) 00:06:240450デフォルトの名無しさん
2007/10/31(水) 00:08:27ニートなので一晩中でも相手してくれますよ
0451デフォルトの名無しさん
2007/10/31(水) 00:09:270452デフォルトの名無しさん
2007/10/31(水) 00:10:010453デフォルトの名無しさん
2007/10/31(水) 00:11:240454デフォルトの名無しさん
2007/10/31(水) 00:18:41ただ、あやつにそのような恥を感じるルーチンが実装されているとは思えないけど。
0455デフォルトの名無しさん
2007/10/31(水) 00:19:22「上から目線」に立ちたい人の定番だからね。
でも本当の意味で上の目線になれる人間は、そのような人格批判はしないよ。
0456デフォルトの名無しさん
2007/10/31(水) 00:20:08・御都合主義的な白昼夢に耽る。
・自分のことにしか関心がない。
・高慢で横柄な態度。
・特別な人間であると思っている。
・自分は特別な人間にしか理解されないと思っている。
・冷淡で、他人を利用しようとする。
・批判に対して過剰に反応する。
・虚栄心から、嘘をつきやすい。
・有名人の追っかけ。
・宗教の熱烈な信者。
0457デフォルトの名無しさん
2007/10/31(水) 00:21:400458デフォルトの名無しさん
2007/10/31(水) 00:23:04! 演算子は true/false を受け取るものなの?
それとも単に条件式と同様に
!x は x が 0 ならば 0 以外となり x が 0 以外ならば 0 となる
などと定義されているだけなの?
strcmp の話は !strcmp(s1,s2) と書くことが意味的にどうかって話なので
結局は ! 演算子に渡すべき値が true/false の代用としての int なのか
単なる int なのかっていう話だと思うんだけど。
0459デフォルトの名無しさん
2007/10/31(水) 00:25:29・書き手の意図通りに動く
・一般的なプログラマーならきちんと書き手の意図を読み取れる
であるのにヘタなのか?
0460デフォルトの名無しさん
2007/10/31(水) 00:25:470461デフォルトの名無しさん
2007/10/31(水) 00:25:51非ゼロ -> 0
0 -> 1
って仕様
0462デフォルトの名無しさん
2007/10/31(水) 00:26:57移ってないんじゃない?
0463デフォルトの名無しさん
2007/10/31(水) 00:26:58それが本当なら !strcmp(s1,s2) は何もおかしくないってことで結論出てる?
0464デフォルトの名無しさん
2007/10/31(水) 00:27:150465デフォルトの名無しさん
2007/10/31(水) 00:27:24Cの定義上
if ( exp ) { /* exp は nonzero */ }
となってるのを、
if ( exp ) { /* exp は true */ }
と見せかけるのはプログラマの仕事。
だから >>446 のコードは文法上は正しくても、汚いコードであることには変わりない。
ただ、if( exp ){ } と書けるからといって、if( exp ){ /* exp は true */ } というわけではなく、
あくまで文法上は、if( exp ){ /* exp は nonzero */ } であると解釈しているに過ぎないと。
if ( exp ) { /* exp は true */ } の形にするのはプログラマの仕事で、
if ( exp ) { } と書けたからといって、exp 真偽値があるという根拠にはならない。
exp を真偽値に見せかけるのはプログラマの仕事。
C言語が高級アセンブラといわれる所以。そう見えるように書いてあげないと、それらしくならない言語。
0466デフォルトの名無しさん
2007/10/31(水) 00:28:36規格で未定義な事を書けばヘタって言われるみたいよ
0467デフォルトの名無しさん
2007/10/31(水) 00:28:48あれ?違った?
文脈的に複素数とか圏とかの話じゃないよね?
0468デフォルトの名無しさん
2007/10/31(水) 00:29:380469デフォルトの名無しさん
2007/10/31(水) 00:30:250470デフォルトの名無しさん
2007/10/31(水) 00:30:37そういう主義主張は興味ないです。
てか、「C が」そういう主義主張を持っているなら、
最初から
0 は false である。
0 以外は true である。
と定義して、if (exp) {} は exp が true の場合には…、と書いているはず。
そう書いていないということは、
C の仕様からは特にそういう主義主張は読み取れない
ということだと思うんだけど。
0471デフォルトの名無しさん
2007/10/31(水) 00:31:02> ! 演算子は true/false を受け取るものなの?
数を渡すことになってる。
だけど、論理値を渡されることを期待されてる。
それをそう見えるように記述しないと、それらしくならない言語だから。
定義で許されることを全部許すと、節操無しの無茶苦茶になる。
高級アセンブラだからしかたない。書くほうが気をつけないと。
0472デフォルトの名無しさん
2007/10/31(水) 00:32:24文法上はおかしくないってだけの話だよ。
!strcmpはコンパイルとおるし、文法上おかいいはずなんて無いでしょ。
ヘタなコードだって、コンパイルぐらいは通る。
0473デフォルトの名無しさん
2007/10/31(水) 00:32:28読み取り「易さ」の話ね。読めないって言う人はこのスレには居ないだろうし。
あとコンパイルエラーとか未定義動作とか、ヘタとかいう次元じゃ無いと思う。
0474デフォルトの名無しさん
2007/10/31(水) 00:32:45exp は nonzeroである。ていうのは
exp == nozero が真て事であり、
exp != 0が真て事でしょ?
そういう意味のtrueだと言っているのだと思うけど?
0475デフォルトの名無しさん
2007/10/31(水) 00:33:36そう見えるように記述してあげることで、
「C を知らない人にも」それらしく見えるようになる。
という主張なら同意。
0476デフォルトの名無しさん
2007/10/31(水) 00:36:14スレタイ的には主観も含むんじゃね?個人差ありきで。
綺麗さってそれなりに大事だよ。ある程度指標になる。
最優先じゃないけどね。
0477デフォルトの名無しさん
2007/10/31(水) 00:36:42if (x != 0) { ... }
と書くのは
他の言語で
if (b == true) { ... }
と書くのと同じってことだね。
0478459
2007/10/31(水) 00:37:32このコードが書き手の意図通り動作(s1とs2が等しいか否かで分岐)する/しないを
証明できれば、結論は直ぐに出る気がするのだが。
#場当たり的対応でスレを伸ばすような輩が書くコードなんて高が知れてる希ガス
0479デフォルトの名無しさん
2007/10/31(水) 00:37:38> 0 は false である。
> 0 以外は true である。
そっち方向には定義されてないが、
true が nonzero であることは、暗黙の了解です。
C言語の仕様書にも何の注釈も無くばんばん出てきます。
つまり、C言語にも意味の上での真偽値はある。
ただ、機能として持ってないだけ。
>if (exp) {} は exp が true の場合には…
と仕様書に書けなかったのは、真偽値を整数値で代用してしまったため。
0480デフォルトの名無しさん
2007/10/31(水) 00:37:45うん
書いてからそれは思った
0481デフォルトの名無しさん
2007/10/31(水) 00:39:18コピペで量産したコードだって >>459 の 3 条件は余裕で満たすわけだし。
0482デフォルトの名無しさん
2007/10/31(水) 00:39:28暗黙の了解ではありませんよ。
0483デフォルトの名無しさん
2007/10/31(水) 00:40:56勝手に同じだと思ってればいいんじゃなかろうか
0484デフォルトの名無しさん
2007/10/31(水) 00:41:31>このコードが書き手の意図通り動作する/しないを
今まで何のレスを読んできたんだよ・・・。
gotoやグローバル変数も書き手の意図通り動作するよ。
そういう話じゃないだろ?
0485デフォルトの名無しさん
2007/10/31(水) 00:41:53仕様書よめ。
式を取って、その式の値が0かどうかで分岐すると書いてある。
真偽は関係ない。
まるで真偽値を取っているかのように見せかけるのはプログラマの仕事。
Cは高級アセンブラだから、書く側がそれらしく工夫しないと、それらしくは見えない。
「文法上こう書けるから、これはこういう意味だよね」は通用しない。
int i; char *p;
i [ p ] ;
と書けちゃう言語だということをお忘れなく。
0486デフォルトの名無しさん
2007/10/31(水) 00:42:55ifの中身を真偽に見せかけたかったら、それっぽく見せかけるのはたしかにPGの仕事だ
でも別に必ずしも真偽にする必要はないだろ
本来ほしい条件は真偽ではなく有無の場合ってのは多々ある
この場合if(p)とはif(!p)のほうがそれっぽく見える表現だと思うよ
0487デフォルトの名無しさん
2007/10/31(水) 00:43:05しかし、仕様書にtrueやfalseといった、本来C言語に必要ない概念が出てくることもお忘れなく。
0488デフォルトの名無しさん
2007/10/31(水) 00:45:29書き手の意図どおりに動作するかどうかは問題ではない。
どんなにヘタなコードでも、書き手の意図どおりに動作する。
0489デフォルトの名無しさん
2007/10/31(水) 00:46:59>式を取って、その式の値が0かどうかで分岐すると書いてある。
>真偽は関係ない。
ここまで同意.
整数値と真偽値を文脈に応じて読み替えるのはプログラマの仕事。
Cは高級アセンブラだから、読む側が経験を積まないと、書き手の意図は読み取れない。
「if だから、条件式は真偽値だよね」は通用しない。
if (!strcmp(s1, s2)) {}
と書いて構わない仕様だといういうことをお忘れなく。
とも言えるわけで。
平行線だと思います。
0490デフォルトの名無しさん
2007/10/31(水) 00:49:27ポインタの場合は特殊だと、前にも書いたが・・・。
値が 0 のポインタには特殊な意味があるから、例外的に if( !p )と書いてもいいのではないかと思う。
しかしながら、整数の 0 には特別な意味は無いので、
if ( !i ){ } などとするのは汚いだろうと。
0491デフォルトの名無しさん
2007/10/31(水) 00:50:51でもその考え方だとforじゃなくてgotoでも良くね?ってことにもなりかねないよ。
0492デフォルトの名無しさん
2007/10/31(水) 00:51:28もちろん書いても構わない。だけど、汚いねというだけ。
C言語にも、意味の上での真偽はある。機能が無いだけで。
0493デフォルトの名無しさん
2007/10/31(水) 00:51:29expをtrue/falseに見せかけるなんてのは、Cを理解していない初心者がすること。
expがtrue/falseであると見せかけて分かりやすくしたつもりになっても、結局はよく分かっていない初心者を作り出しているに過ぎない。
何回も言われているのに、なんで一向に理解してくれないんだろう。
0494デフォルトの名無しさん
2007/10/31(水) 00:52:29それはお前が人格障害者だから
0495デフォルトの名無しさん
2007/10/31(水) 00:53:45そういう主張ってのは、
自分の能力と共に示さないと周囲は納得しないので、
2ch向きじゃないね。
たとえば、あなたが優秀なプログラマで(それをオープンソースか何かで世間に堂々と証明できて)
自分の能力の証明と共にブログか何かで主張すれば、世間はついてくると思う。
でも、2ch ではそういう主張は説得力を持たないんだよね。
根拠のある事実を納得させることは 2ch でもできるけど、
自分の「思想」を匿名で広めるのは無理。
0496デフォルトの名無しさん
2007/10/31(水) 00:54:49仕様書を読んでください。
C言語にも、意味の上での真偽の概念があるということがわかります。
関数の戻り値がtrueだとかそうじゃないとか、普通に出てきます。
一々非0とは書かない。意味の上での真偽はあるということ。
仕様書レベルで出てくるということ。
0497デフォルトの名無しさん
2007/10/31(水) 00:56:51どうして?
0498デフォルトの名無しさん
2007/10/31(水) 00:56:55「コピペで量産した」からと言って下手ではないし、
「コピペで量産した」「>459の条件を満たす」下手なコードが
下手たる条件は「冗長」だと思うけど、if(!strcmp))はそれを満たすかな?
gotoやグローバル変数が下手な理由も同様だと思うけど。
>488
書き手の意図通りに動作しないコードは明らかにヘタです。
従って問題です。
0499デフォルトの名無しさん
2007/10/31(水) 00:58:35>書き手の意図通りに動作しないコードは明らかにヘタです。
>従って問題です。
今は問題じゃ無いという意味。
0500デフォルトの名無しさん
2007/10/31(水) 00:58:38じゃあfopenの結果のif(fp)はよくてopenの結果のif(fd)はだめなのかい?
0に特別な意味は無いって言うけど
インドの方向を見ながら0の概念を今一度思い起こしてみようよ
0501デフォルトの名無しさん
2007/10/31(水) 00:59:120502デフォルトの名無しさん
2007/10/31(水) 00:59:25ある程度言語に依存しないロジックの層が有って、
その上に仕様書、さらに製品としての戦略・強み、みたいなのがあるとして、
ロジックの層を出来るだけ「C言語にコンパイル」せずにソースにしたいという感覚。
ソースからロジックの意図が見えてくる感じのね。
0503デフォルトの名無しさん
2007/10/31(水) 01:02:19だったらJavaにでも転身すれば?
C言語は「高級アセンブラ」という異名があるほど
ハードウェアと密着している
0504デフォルトの名無しさん
2007/10/31(水) 01:02:410505デフォルトの名無しさん
2007/10/31(水) 01:03:18「for だから、ループだよね」は通用しない。
gotoで書いても動作に問題は無いよ。
0506デフォルトの名無しさん
2007/10/31(水) 01:03:570507デフォルトの名無しさん
2007/10/31(水) 01:04:56>open
俺は 0 と比較するが。
それから、数値としての 0 になにか特別な重みがあったりはしない。
無いという概念に特別な重みを設けないで済むように、数値としての 0 が発明された。
むしろ、 0 が特別であっては困る。
0508デフォルトの名無しさん
2007/10/31(水) 01:05:490509デフォルトの名無しさん
2007/10/31(水) 01:06:16>「for だから、ループだよね」は通用しない。
for は ループだと定義してある。
0510500
2007/10/31(水) 01:06:270511デフォルトの名無しさん
2007/10/31(水) 01:07:12値が 0 のポインタは特別な値として定義してあるから。
一方、整数の 0 は特別な値ではない。
0512デフォルトの名無しさん
2007/10/31(水) 01:07:470513デフォルトの名無しさん
2007/10/31(水) 01:07:49多くのCPUにとって0は特別
Cを使うならそれを意識して当然
0514デフォルトの名無しさん
2007/10/31(水) 01:07:55いまさらそんな・・・
0515デフォルトの名無しさん
2007/10/31(水) 01:08:14Javaもやってるし最近はWindowsCE用で非接触カードデバイス制御とかやってるし。
>>504
OFFでも無い限り偶然でもまず会うこと無いだろ。
それにしてもその程度のレスで能力を見切る目の鋭さは異常w
0516デフォルトの名無しさん
2007/10/31(水) 01:09:16それはあくまでCPUの都合だろ。
今時そんなコード書いてるようじゃ、ヘタだね。
ループも全部ダウンカウンタで書いてるの?
0517デフォルトの名無しさん
2007/10/31(水) 01:09:580518デフォルトの名無しさん
2007/10/31(水) 01:10:40ポインタの 0 は特別な値だからね。
0519デフォルトの名無しさん
2007/10/31(水) 01:11:12ここから先は結論に納得できない奴が火病を起こすだけっぽい。撤退撤退。
0520デフォルトの名無しさん
2007/10/31(水) 01:13:03if ((fp = fopen(fname, "r")) != NULL)
{
}
0521デフォルトの名無しさん
2007/10/31(水) 01:13:22・!は 非0を与えたら0、0を与えたら1 という結果を返す演算子である。
・従って if(!strcmp(s1,s2)) と書けば、s1とs2が等しい時のみ
関連するステートメントが実行される。
ここまでにツッコミを入れる余地は無いと思う。
だがこの書き方が否定されるべき理由が1つだけある。
「!」の存在により、逆条件で実行されてしまうように錯覚してしまう恐れがあるのだ。
たったこれだけの事だが、本当に上手い書き方ならばこうした錯覚も回避できる。
そう、if(strcmp(s1,s2)==0) と書けば良い。
0522デフォルトの名無しさん
2007/10/31(水) 01:13:22俺も
0523デフォルトの名無しさん
2007/10/31(水) 01:14:25> >>513
> それはあくまでCPUの都合だろ。
> 今時そんなコード書いてるようじゃ、ヘタだね。
CはCPUの都合に合わせて設計されてるだろ?
今時も何もない。
Cを使うということはそういうことだ。
> ループも全部ダウンカウンタで書いてるの?
パフォーマンスが命の仕事してるからそういうこともしたね。
今はPPC使ってるのでその必要はほぼないけどな。
0524デフォルトの名無しさん
2007/10/31(水) 01:15:33どう書いても馬鹿は錯覚するので
読み手のレベルを想定しながら書くだけ。
言語ごとに言えば、俺がコードを書く時に暗黙に想定する読み手のレベルは
C > Java > VB
0525デフォルトの名無しさん
2007/10/31(水) 01:15:36最初から見やすさのみの問題だったのに
仕様として定義されているから…とか変なこと言う奴が帰っていって
元の流れに戻りつつある感じだよ
0526デフォルトの名無しさん
2007/10/31(水) 01:15:38ノシ
0527デフォルトの名無しさん
2007/10/31(水) 01:16:086.5.3.3 Unary arithmetic operators
5 The result of the logical negation operator ! is 0 if the value of its operand compares
unequal to 0, 1 if the value of its operand compares equal to 0. The result has type int.
The expression !E is equivalent to (0==E).
ISOのこれだ
not演算子は、規格書で(0==E)と規定されているのだから、右辺定数を使うなら、not演算子を使うのはおかしいと主張しようとしたのだが
問題の発言では、規格書からの引用はせず、!strcmpはおかしいだろうとだけ言い出す
strcmpの返す値は符号だから論理値として処理してもおかしくないだろう反論される
それは違うと反論するも、コードを走らせたら、実行ファイルを作ったコンパイラにより、結果はバラバラになってしまう(1か-1か0を返す物があれば、s1-s2を返す物がある)
しょうがないからnonzeroはtrueでは無いと言い張り現在に至る
主張を通したいなら、その裏づけは誤解を受けないようにしなければならないと言う良い例だな
また、左辺に定数を置く奴はへそ曲りであるという証明でもあるかも知れない
0528デフォルトの名無しさん
2007/10/31(水) 01:18:39今はしないのなら、
今時、0 を意識したコード書いてたらヘタってことだろ。
0529デフォルトの名無しさん
2007/10/31(水) 01:19:09深夜1時にしてこの釣り方はヤベェw
0530デフォルトの名無しさん
2007/10/31(水) 01:22:10>strcmpの返す値は符号だから論理値として処理してもおかしくないだろう反論される
>それは違うと反論するも、
>コードを走らせたら、実行ファイルを作ったコンパイラにより、結果はバラバラになってしまう
>(1か-1か0を返す物があれば、s1-s2を返す物がある)
>しょうがないからnonzeroはtrueでは無いと言い張り現在に至る
この流れが判らないのだが。0より大きい「数」を返す、といったとき、
返ってくる値は1でも2でも3でも構わないのだが。
0531デフォルトの名無しさん
2007/10/31(水) 01:23:35しかし、ここまで集中砲火を浴びながら自分を省みない自信というか無謀というか世間知らずは凄いな。
まるで、亀父をみているようだ。
0532デフォルトの名無しさん
2007/10/31(水) 01:25:150533デフォルトの名無しさん
2007/10/31(水) 01:26:04#define STRCMP_PLUS 1
#define STRCMP_ZERO 2
#define STRCMP_MUINUS 3
どこかでとか定義してあって、
まるでそれらの値を返すかのように聞こえる。
整数の符号として返す、が正しい日本語では?
まぁ、整数の符号として返す、ということは、整数を返すということなんだけど。
0534デフォルトの名無しさん
2007/10/31(水) 01:26:52ちなみに、
>>493
は いつもの人 ではないよ。
0535デフォルトの名無しさん
2007/10/31(水) 01:27:59そう思うならコテ付ければ。
奴が付けなくても皆が付ければ分かる。
0536デフォルトの名無しさん
2007/10/31(水) 01:30:20早起きなのか昼夜が逆転しているのか。。。
0537OO ◆sqaw1gGOfo
2007/10/31(水) 01:30:51while (strcmp(s1,s2))
{
}
上のコードは正しいというより、
Cプログラマは、すぐに下のアセンブリ言語が思い浮かぶけど、
上のようなコードはヘタに見えるってだけ。
L2:
movl $_s2, 4(%esp)
movl $_s1, (%esp)
call _strcmp
testl %eax, %eax
jne L4
jmp L1
L4:
(任意のループ処理)
jmp L2
L1:
leave
ret
だいたい、Cはラムダ計算「(λx.x)N→(ベータ変換)→Nとか」しか出来ない言語じゃねーし。
Cで数学を語るのは馬鹿。
0538デフォルトの名無しさん
2007/10/31(水) 01:31:23昼夜逆転か。ニートだけじゃなくて精神病も発病してるんじゃね?w
0539デフォルトの名無しさん
2007/10/31(水) 01:33:01俺コテつけるの止めるわ。
0540デフォルトの名無しさん
2007/10/31(水) 01:34:44PPCだからする必要がないと言っただけ。
しかもそれはお前が言ったループの最適化の話。
N個配列の有効なindexは0からN-1まで
正常終了の終了コードは0
.bbsは0で初期化
Cやるなら0は特別であることを意識せざるをえない
0541デフォルトの名無しさん
2007/10/31(水) 01:36:57そうだよ、strcmpは0か、0より大きいか、0より小さい数であれば返す数が幾つだろうと関係ない
しかし、彼にとってそれは問題じゃなく、not演算子で比較することが問題だったわけだ
にもかかわらず、論理値なんて定義されていないと、自分の主張とは全然関係ない方向に自分から足を突っ込んだからさあ大変
いつまでも、誰にも、理解してもらえ無いことになるわけだな
ちょっとだけだからと気軽に借りた10万円、複利複利で気がつけば1000万!もう分けわかんね!
ってのが彼の心境かもしれん
0542デフォルトの名無しさん
2007/10/31(水) 01:37:44お、今日は出番が早いね。
せっかくコテにしたんだから、しばらく付けておいてくれよ。
俺、あんたのファンなんだけど、コテがついてると発言を追いやすくて助かるよ。
0543デフォルトの名無しさん
2007/10/31(水) 01:39:17.bss
だ
0545デフォルトの名無しさん
2007/10/31(水) 01:40:090546デフォルトの名無しさん
2007/10/31(水) 01:41:55> しかし、彼にとってそれは問題じゃなく、not演算子で比較することが問題だったわけだ
だから初めから 数 を返すんだから 数 と比較しろよ と書いてただろ。
それを、strcmpは符号を返すとか分けの判らないことを言い出すやつが居てだな。
0547デフォルトの名無しさん
2007/10/31(水) 01:44:04>not演算子は、規格書で(0==E)と規定されているのだから、右辺定数を使うなら、not演算子を使うのはおかしい
なるほど。それなら一応筋が通っている。
しかしそれでは、以下のようなマクロも定義してはいけないのではないか?
#define list_for_each(top, entry) \
for (entry = top; NULL != entry; entry = entry->next)
list_for_each(top, p) {
/*...*.
}
0548OO ◆sqaw1gGOfo
2007/10/31(水) 01:44:11このスレでの問題は、
while (strcmp(s1,s2))
{
}
の書き方の問題、じゃないのか?
0549デフォルトの名無しさん
2007/10/31(水) 01:47:45いつもの人だけど、
>>527 は彼の妄想だから勘弁して。
0550デフォルトの名無しさん
2007/10/31(水) 01:48:13「ヘタかどうか」が問題です。
※ヘタであるのを証明するのに規格は不要です。
0551デフォルトの名無しさん
2007/10/31(水) 01:48:190552デフォルトの名無しさん
2007/10/31(水) 01:49:03もう寝るの?
0554デフォルトの名無しさん
2007/10/31(水) 01:50:12違うよ、最初から君が、not演算子の定義をISOから引っ張って来て、ISOでもこう書いてるでしょっていってれば
strcmpがどうのこうのなんて話にゃならねぇんだよ
0555デフォルトの名無しさん
2007/10/31(水) 01:52:170556デフォルトの名無しさん
2007/10/31(水) 01:53:06「これぱっと見ヘタじゃね?」
「下手だな」
「そうでもないよ」
「マジで?」
程度の雑談でも良いんじゃね?超既出に掛からない程度なら。
0557デフォルトの名無しさん
2007/10/31(水) 01:54:15流石に疲れたのかな。
>>548
if (strcmp(s1,s2)) は問題にしていなかったような。
if (!strcmp(s1,s2)) この頭の'!'に噛み付いてた。
定数左派なら、重要な'!'が最初に出てくるから、見やすいと思うんだけどな。
0558デフォルトの名無しさん
2007/10/31(水) 01:56:16いや本当にキチガイである事を悟られたくないので
名残惜しいが書かない事にしたんだろ
0559デフォルトの名無しさん
2007/10/31(水) 01:57:12if (strcmp(s1,s2)) → ちょっと下手
if (!strcmp(s1,s2)) → ちょっと下手
という感覚。
でもそう書くのを批判するほど嫌ってはいないってところ。
0560デフォルトの名無しさん
2007/10/31(水) 02:01:00俺はその程度の書き方はいいと思う
むしろその書き方を批判するのは頭が固い証拠
多分いつもの人は中年のオッサンだろう
0561デフォルトの名無しさん
2007/10/31(水) 02:04:53俺はむしろこっちの方が読みやすいかな
if (strcmp(s1,s2)) → s1とs2が違うとき〜
if (!strcmp(s1,s2)) → s1とs2が違わないとき〜
みたいな感じで
0562デフォルトの名無しさん
2007/10/31(水) 02:06:38左辺定数を認めようとしない、右辺定数論者に対し、ISOの定義が(0==E)なのだからnot演算子を使わず
if (strcmp(s1, s2) == 0)
と書きやがれって言いたかったんだろう
問題は、それを丁寧伝えようとしなかったことじゃね?
0563デフォルトの名無しさん
2007/10/31(水) 02:08:07K&RでCを学んだ人にとっては、どっちも当たり前の書き方なんだけどね。
0564デフォルトの名無しさん
2007/10/31(水) 02:08:23while (*p++ = *q++);
も否定しそうだからシカトシカト
0565デフォルトの名無しさん
2007/10/31(水) 02:08:45異論があるならどうぞ。
0566デフォルトの名無しさん
2007/10/31(水) 02:10:15うん、俺も許容範囲。
!=0とか付けた方が他のメンバーがアホなミスしてとばっちり食らう
確率がほんの少し下がるかもってところ。
>>561
自衛のためだよ。俺もそれでも普通に読めるけどさ、
javaとかは普通に書けるけどc言語はあまりって奴などは特に
str cmp -> 文字列 比較 -> 同じなら多分true
っていう直感が出てバグの原因になったりするし。
0567デフォルトの名無しさん
2007/10/31(水) 02:10:15俺は右辺定数論者だが、それはOKだぞ
0568デフォルトの名無しさん
2007/10/31(水) 02:10:19だからお前のルールには従わないって決めたから。
以上。
0569521=565
2007/10/31(水) 02:10:31>521からの飛び入りだからね。
0570デフォルトの名無しさん
2007/10/31(水) 02:12:06こういう風見鶏みたいな態度が一番ムカツクな
0571デフォルトの名無しさん
2007/10/31(水) 02:13:07if ((strcmp(s1,s2) != 0) == 1) としないのか不思議だ。
strcmpだと雑音が入るから、isdigitでもisalphaでもいいけど。
0572デフォルトの名無しさん
2007/10/31(水) 02:14:27どうでもいいよ
好きな事書いてなよ
読まないから
0573デフォルトの名無しさん
2007/10/31(水) 02:15:53またまたw
あの特徴のある書き方といい長文といい、実はいつもの人なんでしょw
0574デフォルトの名無しさん
2007/10/31(水) 02:18:24今までのレス読む限り、if (!strcmp(s1,s2)) 反対の人も
if ((strcmp(s1,s2) != 0) == 1) は批判するだろうし、
isdigitには直でも誰も批判しないと思う。
0575OO ◆sqaw1gGOfo
2007/10/31(水) 02:20:20if (0 == strcmp(s1,s2))
の事?
これはヘタな書き方に見えるけど、
すごく目立って、うわ、っと注目できるから良コードの部類だ。
ヘタなコードはもっとひどい。
0576デフォルトの名無しさん
2007/10/31(水) 02:20:36むしろ、左辺定数論者の方がその書き方を否定するな。
実際、いつもの人はその書き方を否定していたし。
まあ、チーム開発を考えると、その書き方を当たり前に理解できるメンバーだけを集めるってのは現実的じゃないからな。
もっと分かりやすく書けというのも理解できないわけじゃない。
0577デフォルトの名無しさん
2007/10/31(水) 02:21:14左辺定数は許容できません
not演算子については、原義で定数が、右にあろうが左にあろうが、not演算子になった時点で定数は既に隠蔽化されているので、使用しても問題ないと思います
定数をわざわざ左において、誤代入を防止するよりも、not演算子を積極的に活用する方が理にかなっていると思います
0578デフォルトの名無しさん
2007/10/31(水) 02:21:19つ[プログラミング言語C]
0579521
2007/10/31(水) 02:21:24ごめん、誰だと勘違いしているのかアンカーで示してみて。
断っておくけどISO云々の話はノータッチだよ。
0580デフォルトの名無しさん
2007/10/31(水) 02:22:54戻り値のbooleanとintの区別をつけたいからなので
booleanの結果は調べなくてOK
0581デフォルトの名無しさん
2007/10/31(水) 02:23:260かどうか調べるのに、!hogehoge()とfugafuga() == 0の二通りを使い分けるってことか
保守しにくそうなソースだな
0582デフォルトの名無しさん
2007/10/31(水) 02:23:28!, ==, !=, <, >, isXXX などで、Cでは論理値型とか無いから1とか返すけど、
プログラム一般で論理値を意味するもの返すというのは共通認識かと
0583デフォルトの名無しさん
2007/10/31(水) 02:24:13釣り?
0584デフォルトの名無しさん
2007/10/31(水) 02:24:18いいから何か書いてみなよ
読まないから
0585561
2007/10/31(水) 02:25:42でも、
str cmp -> 文字列 比較 -> 同じなら多分true -> strcmp(s1,s2)==0 はs1とs2が違うとき
って解釈されて結局同じな気がするのよ
0586デフォルトの名無しさん
2007/10/31(水) 02:26:00前スレの80でしょ。
さすがに全部調べるのは勘弁してちょ。
---------------
"== NULL"
"NULL =="
こんなの多数決で考える頭はもうちょっと働かせたほうがよい
if(変数 = NULL)
が引き起こすバグをどうやって見つけるのか考えた事がある?ない?
難しい正規表現でも作る?`NULL'以外の場合もあるよ。
それより定数を左辺にもってくる方法を身につければいいだけじゃない?
自分がグループリーダーになったとき、部下のミスを見つけられるレベルになれる?
これはただの忠告。>>72はそれでいいならいい。私に累が及ばなければどんなコーディングでも結構。
プログラミングの先生だって×は出さないだろうしなw
0587521
2007/10/31(水) 02:26:27>564は人によっては意味を誤解するから否定する。
人やコンパイラ、環境によって解釈のされ方が一意ではない
書き方が上手いとは思えん。
0588デフォルトの名無しさん
2007/10/31(水) 02:26:410589デフォルトの名無しさん
2007/10/31(水) 02:29:26コンパイラや環境が変わっても>>564の解釈は変わりませんよwww
0590デフォルトの名無しさん
2007/10/31(水) 02:30:10>>578は目に入らなかったのかい?
お前さんCの作者にケンカ売ってんだよ
0591デフォルトの名無しさん
2007/10/31(水) 02:30:28釣れますか?
0592521
2007/10/31(水) 02:31:10「人」は異なる解釈をする恐れがある。
読まないなら全部読むな。部分的に都合よく読まないのは止めれ。
0593デフォルトの名無しさん
2007/10/31(水) 02:32:14>読まないなら全部読むな。部分的に都合よく読まないのは止めれ。
いや、この言葉にも従いませんwww
0594デフォルトの名無しさん
2007/10/31(水) 02:33:20if(定数=変数)と間違うより、ついif(変数==定数)
と書いてしまう方が遥かに多かったので、
そういうクセをつけるのはやめた。
まぁ、そういうテクニックを身につけるより
==と書く事を身につける方がはやいだろうな。
どっちみち==と書くんだし。
0595デフォルトの名無しさん
2007/10/31(水) 02:33:32ぱっとみ真偽を返すように見えるコードと、
後者の「0と比較?」という違和感を発生させるコードでは
ミスる可能性は同じでは無いよ。
正しいかどうかは別にして↓みたいな考え。
・間違ったコードは間違って見えるようにする
http://qrl.jp/?245078
0596デフォルトの名無しさん
2007/10/31(水) 02:34:42> 人「やコンパイラ、環境」によって解釈のされ方が一意ではない
> 書き方が上手いとは思えん。
とくに「」の中ね。
>>564の話をしていて、いきなり無関係なことを言い出したのかい?
0597デフォルトの名無しさん
2007/10/31(水) 02:36:29普通そうじゃね?違う?
0598521
2007/10/31(水) 02:38:39あのー、>587では>564の話だけじゃなく左右定数の話もしてるんだけど。
前者を否定しないのに後者を否定する理由が
「人やコンパイラ、環境によって解釈のされ方が一意ではない」だよ。
※すなわち前者は左右どちらだろうが解釈のされ方は(裏読みしない限り)一意だけど、
後者は人が一意ではない読み方をする恐れがある。
頼むから変な所にだけ注目せんといて。
0599デフォルトの名無しさん
2007/10/31(水) 02:39:06真偽を返すなんてC言語を理解していない証拠。
> ここまでで、プログラマの成長の3つの段階を示した。
> 1. きれいなものと汚いものの区別がつかない。
> 2. きれいさについて表面的な考えを持っている。そのほとんどはコーディング規則に合っているかどうかというレベルだ。
> 3. コードのきたなさについて、表面的でない小さな兆候も嗅ぎつけるようになり、気になってコードを直すようになる。
> これよりもさらに高いレベルがあり、それこそ私が本当に話したいと思っているものだ。
> 4. コードを直すために汚いコードに対する嗅覚を生かせるような仕組みを、最初から作り込むようになる。
コーディングスタイルにこだわらないって人は、この1の段階の人なんだろう、きっと。
これは595に対してのコメントじゃないけど。
0600デフォルトの名無しさん
2007/10/31(水) 02:41:38頼むから「人やコンパイラ、環境」とか三つもの全く異なる概念を
一度に語らないでくれる?一つずつ話して欲しいな
0601デフォルトの名無しさん
2007/10/31(水) 02:42:22だから、前者も後者も「人」によって解釈が変わることがあるかもしれないけど、「コンパイラや環境」によっては変わらないだろ?
なのになんで、いきなり無関係なコンパイラや環境の話が出てきたのか質問しているんだよ
質問の答えをはぐらかさないで欲しいな
0602デフォルトの名無しさん
2007/10/31(水) 02:42:51> 真偽を返すなんてC言語を理解していない証拠
本気で言ってるの?
俺は"true"返すみたいなことを言ってるわけじゃないんだけど、
過去レス読んだ方が良いと思う。
0603デフォルトの名無しさん
2007/10/31(水) 02:45:29そのプログラマの成長段階ってのはCプログラマにも
当てはまるとは到底思えない
0604デフォルトの名無しさん
2007/10/31(水) 02:46:57真のプログラマはgotoを使う。
int rc;
rc=strcmp(s1,s2);
/*if(rc==0) goto L1;*/
if(rc<0) goto L2;
if(rc>0) goto L3;
L0: hage();
L1: fuga();
L2: hoge();
0605デフォルトの名無しさん
2007/10/31(水) 02:47:23STLのライブラリの作者はどのレベルにいるのか是非お聞きしたい
0606デフォルトの名無しさん
2007/10/31(水) 02:47:50int rc;
rc=strcmp(s1,s2);
/*if(rc==0) goto L1;*/
if(rc<0) goto L2;
if(rc>0) goto L3;
L1: hage();
L2: fuga();
L3: hoge();
0607デフォルトの名無しさん
2007/10/31(水) 02:48:10あのさ、今は「C」の話をしてるんでしょ?
「C++」の話はしてないよ
0608デフォルトの名無しさん
2007/10/31(水) 02:53:25C言語ではあくまでも0か非0を返すだけです。
0がFALSEで非0がTRUEと思うのは人間がそう思うだけ。
C言語では整数の0と人間がFALSEであると思う0とは区別しません。
ここまでの理解はいいよな?
で、それを踏まえて、
関数が0を返す->関数は論理値のFALSEを返す->戻り値が論理FALSEか調べる->戻り値が0か調べる
なんて遠回りをしないで、
関数が0を返す->戻り値が0か調べる
と考えた方が分かりやすいだろうって言ってるだけ。
0609デフォルトの名無しさん
2007/10/31(水) 02:56:46理解できないなら読み飛ばすか、理解できるまでじっくり読むか、質問すりゃいい。
>601
>なのになんで、いきなり無関係なコンパイラや環境の話が出てきたのか質問しているんだよ
漏れの言う「誤解」や「一意ではない解釈をする」の主語が「人」だけではなく、
コンパイラも指すこと、また要因として環境も挙げられる事を明示しておきたかった。
以上。
これで良いか?
0610デフォルトの名無しさん
2007/10/31(水) 02:58:39確かに。申し訳ない。
しかしCでも
while (*p++ = *q++);
みたいな書き方ができる人はレベル高いと思うんだがどうだろう?
0611デフォルトの名無しさん
2007/10/31(水) 03:00:590612デフォルトの名無しさん
2007/10/31(水) 03:01:11悪い。俺は>>599じゃないよ
そのような書き方はK&Rでも肯定してるし、積極的にマスター
すべきであるような事が書いてある
C言語ではタイプ量が少ない事が好まれる事もあるので、
わざわざ0と比較しないで ! だけで済ませる場合も多いんじゃ
ないかと邪推してみたわけ
0613デフォルトの名無しさん
2007/10/31(水) 03:01:12...
// break;は単なる忘れだと思うので付ける
switch(sign1(strcmp(s1, s2))){
case -1:
fuga; break;
case 0:
hage; break;
case 1:
hoge; break;
}
0614デフォルトの名無しさん
2007/10/31(水) 03:01:35文章構成能力に難有りだな。
分かりやすい文章を書く能力が欠けている。
ところで、コンパイラや環境によって解釈が異なるコードってどんなのがあるんだ?
2つ3つ教えてたもれ。
0615521=609
2007/10/31(水) 03:02:27>610
レベルが高いからと言って上手いとは限らないと思うけど。
まぁ漏れ達から見てヘタとは言えんけど、同レベルの方々から見たら、
誰かはヘタだと思うんでは。
0616デフォルトの名無しさん
2007/10/31(水) 03:02:27そのコードが嫌われるのは
*pのサイズが、*qより小さければどうなるのって事だよ
p[3]なのにq[]="ABC"だと、オーバーフローするでしょ
0617デフォルトの名無しさん
2007/10/31(水) 03:02:51案の定nonzeroの話始めたw
もういいよw
0618デフォルトの名無しさん
2007/10/31(水) 03:05:33VBなんか嫌いだ...orz
0619デフォルトの名無しさん
2007/10/31(水) 03:06:14エラーチェックの箇所と、処理本体は分離させろって習わなかった?
処理本体の前にpとqのエラーチェックをしておけば、そんなことに悩む必要は無いよね。
0620デフォルトの名無しさん
2007/10/31(水) 03:08:02話の内容が分からなければ無理に付き合う必要は無いんですよ。
0621デフォルトの名無しさん
2007/10/31(水) 03:08:23何いってんだ?
嫌われる理由を述べただけだろ
0622521
2007/10/31(水) 03:08:56>ところで、コンパイラや環境によって解釈が異なるコードってどんなのがあるんだ?
orz
0623デフォルトの名無しさん
2007/10/31(水) 03:13:51レス番2桁台から上がってることをわざわざ書いて頂かなくても
言いたいことはよ〜く分かっておりますのでw
0624デフォルトの名無しさん
2007/10/31(水) 03:15:46unsigned int i=0;
i--;
0625デフォルトの名無しさん
2007/10/31(水) 03:15:48こいつ何を言っても難癖付けて延々と同じ所を回る話しかしないから
付き合うだけ時間の無駄だよ
0626デフォルトの名無しさん
2007/10/31(水) 03:16:40pragmaとかエンディアンとか言ってみる
0627デフォルトの名無しさん
2007/10/31(水) 03:17:540628デフォルトの名無しさん
2007/10/31(水) 03:21:35i=i++;
だけでも実装によって動作が違う例がある。
0630デフォルトの名無しさん
2007/10/31(水) 03:22:31それは動作が違うとは言わない。何が起きてもおかしくない、と言う
0631デフォルトの名無しさん
2007/10/31(水) 03:22:33ちなみに俺は別にそれを否定してるわけじゃないからね。
あと、>>608の
>0がFALSEで非0がTRUEと思うのは人間がそう思うだけ。
>...
>なんて遠回りをしないで、
規格でさえlogicalとか出てくるのに、
「人間がそう思うこと」を遠回りとバッサリ切り捨てるのは流石に凄すぎですw
どこのAIですかw
0632デフォルトの名無しさん
2007/10/31(水) 03:24:26わざわざtrueをTRUE、falseをFALSEと書いてみたりご苦労様です。
0633デフォルトの名無しさん
2007/10/31(水) 03:28:23>strcmpの戻り値を勝手に
「ifの中にそのままある」ってところを忘れずにね。
まぁメンバーがまともならどう書いても良いよ。
0634デフォルトの名無しさん
2007/10/31(水) 03:33:113時まで起きてる俺もアレなメンバーかもなw
不毛な論争が結構楽しかったりするから困るw
おやすみ。
0635521
2007/10/31(水) 03:34:19trueとnonzero云々を散々議論してた人と同じ人ですか?
yesと言うならスレの伸びっぷりも頷ける。
間違いなく前スレ80と並ぶ功労者に違いありませんわ。
0636デフォルトの名無しさん
2007/10/31(水) 03:41:48ばーか
不毛だから楽しいんだよ
有用な話なんて、「ふーんなるほど」で終わるだろ
おやすみ。
0637OO ◆sqaw1gGOfo
2007/10/31(水) 04:52:44関数とはサブルーチンでも、S式でもなく、数学の関数ね。
ラムダ計算
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E8%A8%88%E7%AE%97
式 (λxy . y x) (λx . y) は、(λx . (λy. y x) ) (λx . y) だが、
λy . y (λx . y) ではなく、λz . z (λx . y) となる。
なんて計算はおもしろくはあるが、だからってこれがなんかプログラムに有用か?
ラムダ計算じゃ足し算も面倒なんだが。
ちなみに私はゆとりですよ。
0638デフォルトの名無しさん
2007/10/31(水) 07:37:03関数型言語のソースコードの話か、理論的なラムダ計算の話かどっちかにしろよ
0639デフォルトの名無しさん
2007/10/31(水) 07:42:30FUNARG問題
0640デフォルトの名無しさん
2007/10/31(水) 08:08:25どっちも正しいから平行線だったのに。アホだな。
0641640
2007/10/31(水) 08:11:460642デフォルトの名無しさん
2007/10/31(水) 09:10:45ラムダ計算ならペンローズ「工程の新しい心」にものってる
0643デフォルトの名無しさん
2007/10/31(水) 09:27:36話の内容が真逆なのに。
話がループする原因が分かった気がするよw
0644デフォルトの名無しさん
2007/10/31(水) 09:28:340645デフォルトの名無しさん
2007/10/31(水) 09:52:02本来晒される側のアホグラマがなぜかこのスレで頑張ってるのがなぁ・・・
0646デフォルトの名無しさん
2007/10/31(水) 10:52:00なんだよその「犬がおしっこする事はおしっこの匂いをあたりに漂わせて
皆に犬がおしっこした事を伝えるからとてもいい事だ」みたいな意見は
0647デフォルトの名無しさん
2007/10/31(水) 11:58:04例えば、boolやbooleanのある言語で、
if (exp == true) {} とする場合や、
さらに変数名が、is_visible という名前であるのにも関わらず、
if (is_visible == true) とするような場合。
0648デフォルトの名無しさん
2007/10/31(水) 12:05:41それは議論の余地が無いんじゃね?
0649デフォルトの名無しさん
2007/10/31(水) 12:16:190650デフォルトの名無しさん
2007/10/31(水) 12:55:240651デフォルトの名無しさん
2007/10/31(水) 13:14:21「trueはnonzero」は偽
「nonzeroはtrue」は偽
「falseはzero」は偽
「zeroはfalse」は偽
でFA?
0652デフォルトの名無しさん
2007/10/31(水) 13:15:290653デフォルトの名無しさん
2007/10/31(水) 13:21:28規格書も読めないの?
0654デフォルトの名無しさん
2007/10/31(水) 13:50:27みてくれます?
分割ファイルで18ファイルあるんですけど
0655デフォルトの名無しさん
2007/10/31(水) 14:05:37判断した根拠となる文章を、規格書から引用してこい。
話はそれからだ。
0656デフォルトの名無しさん
2007/10/31(水) 14:11:29ファイル数より寧ろみなきゃいけない文字/単語数が(ry
まあ見る気は粗無いが
0657デフォルトの名無しさん
2007/10/31(水) 14:28:36規格書に規定が無いのが根拠。
0658デフォルトの名無しさん
2007/10/31(水) 14:34:47以下、Brainfuckのコードに関する話題のみでよろしく。
0659デフォルトの名無しさん
2007/10/31(水) 14:41:52規格書から該当する規定を引用してこい
話はそれからだ
0660デフォルトの名無しさん
2007/10/31(水) 17:15:05また、C FAQネタですか・・・
0661デフォルトの名無しさん
2007/10/31(水) 17:30:310662デフォルトの名無しさん
2007/10/31(水) 17:36:030663デフォルトの名無しさん
2007/10/31(水) 17:39:38| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
0664デフォルトの名無しさん
2007/10/31(水) 17:41:280665デフォルトの名無しさん
2007/10/31(水) 17:45:06C FAQ 9.2
>もし君が「if((a == b) == TRUE)」が「if(a == b)」の改良版であると信じるのなら、
>な ぜそこで止めるのか。なぜ「if (((a == b) == TRUE) == TRUE)」を 使わないのか
0666デフォルトの名無しさん
2007/10/31(水) 17:45:47/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
0667デフォルトの名無しさん
2007/10/31(水) 17:46:160668デフォルトの名無しさん
2007/10/31(水) 18:12:23なんでこんな延びてるの。
0669デフォルトの名無しさん
2007/10/31(水) 18:14:36こっちの方が正しい
とかいっちゃうから盛り上がってるのかと思われ
0670デフォルトの名無しさん
2007/10/31(水) 18:18:40C FAQ 9.2
>もし君が「if((a == b) == TRUE)」が「if(a == b)」の改良版であると信じるのなら、
>な ぜそこで止めるのか。なぜ「if (((a == b) == TRUE) == TRUE)」を 使わないのか
0671デフォルトの名無しさん
2007/10/31(水) 18:53:380672デフォルトの名無しさん
2007/10/31(水) 19:24:300673デフォルトの名無しさん
2007/10/31(水) 19:25:330674デフォルトの名無しさん
2007/10/31(水) 19:37:510675デフォルトの名無しさん
2007/10/31(水) 20:07:210676デフォルトの名無しさん
2007/10/31(水) 20:08:17お前が標準化委員じゃなくてほんとよかったよ
0677デフォルトの名無しさん
2007/10/31(水) 20:18:420678デフォルトの名無しさん
2007/10/31(水) 20:21:110679デフォルトの名無しさん
2007/10/31(水) 21:19:59672 デフォルトの名無しさん [] 2007/10/31(水) 20:10:05 ID:
627これは?
#include <stdio.h>
#define gosa 0.000001
double pow(double z,int n){
double w=1;
for(int i=0;i<n;i++)
w*=z;
return w;}
double h(double z,int n){
z=z-(pow(z,n)-10)/(n*pow(z,n-1));
return z;}
main(){
printf("%f",pow(3,7));
}
----
これはないな
0680デフォルトの名無しさん
2007/10/31(水) 21:32:370681デフォルトの名無しさん
2007/10/31(水) 21:41:320682デフォルトの名無しさん
2007/10/31(水) 21:57:55これが問題かな?
0683デフォルトの名無しさん
2007/10/31(水) 22:02:290684デフォルトの名無しさん
2007/10/31(水) 22:27:050685デフォルトの名無しさん
2007/10/31(水) 22:31:25問題文自体がへただね
6回読んでようやく意味がわかったよ
3〜9なnについてn^x=10を解けってことだな
0686デフォルトの名無しさん
2007/10/31(水) 22:34:040687デフォルトの名無しさん
2007/10/31(水) 22:34:45失礼
0688デフォルトの名無しさん
2007/10/31(水) 22:42:19でもそれは回答者が自分の勉強のためにやってるからいい事だと思う
そんな人を見下す類の行動はやめないか
0689デフォルトの名無しさん
2007/10/31(水) 22:50:360690デフォルトの名無しさん
2007/10/31(水) 22:54:230691デフォルトの名無しさん
2007/10/31(水) 23:10:09そのまま、対数つかったらあかんのか?
0692デフォルトの名無しさん
2007/10/31(水) 23:57:26とやらの縛りがあるので対数はなしなんだろう
0693デフォルトの名無しさん
2007/11/01(木) 00:05:17音声認識のプログラムつくってんだけど
音声入力から音素入力からどこが間違ってるか全然わからんのだよ。
目標値と微妙にずれるから。
http://www.uploda.org/uporg1090721.txt
viterbiアルゴリズムとぐぐればすぐ説明されてるとおもうんですけど。
0694デフォルトの名無しさん
2007/11/01(木) 00:08:340695デフォルトの名無しさん
2007/11/01(木) 00:16:02データはいってないんで。
自分的にかなり無駄なことをしてるなーとは思うんです。
結構実行に時間かかるんでね。
このアルゴリズム通す前までは数値的にはあってるんすけど。
0696デフォルトの名無しさん
2007/11/01(木) 00:58:090697デフォルトの名無しさん
2007/11/01(木) 02:13:350698デフォルトの名無しさん
2007/11/01(木) 03:01:030699デフォルトの名無しさん
2007/11/01(木) 08:01:11・〜2という関数名は下手な奴が多い
・インデントがガタガタ
・ホワイトスペースなんで入れないの?
・仮引数は二次元配列のほうがいい
・変数名が意味不明なのが多い。スペルアウトしろよ
0700デフォルトの名無しさん
2007/11/01(木) 09:21:520701デフォルトの名無しさん
2007/11/01(木) 09:53:040702デフォルトの名無しさん
2007/11/01(木) 10:13:590703デフォルトの名無しさん
2007/11/01(木) 13:47:59批評するに値しないコード。
0704デフォルトの名無しさん
2007/11/01(木) 17:30:33もう飽きたんだろうね。
0705デフォルトの名無しさん
2007/11/01(木) 17:33:430706デフォルトの名無しさん
2007/11/01(木) 18:06:54GJ!
0707デフォルトの名無しさん
2007/11/01(木) 18:10:440708デフォルトの名無しさん
2007/11/01(木) 18:17:27そりゃスレ違いだわ・・・
0709デフォルトの名無しさん
2007/11/01(木) 20:07:53再うpきぼん!
0710デフォルトの名無しさん
2007/11/01(木) 20:41:18汚いだけのコードだったよ。
見ても面白くない。
0711デフォルトの名無しさん
2007/11/01(木) 21:06:36遅レスだが、>>224は多分NULL判定の事を言ってるんじゃないか?
CreateFileでエラーった時の戻り値ってNULLじゃねーべ。
224だと不味い気がする
0712デフォルトの名無しさん
2007/11/01(木) 23:22:360713デフォルトの名無しさん
2007/11/01(木) 23:27:37脳みその構造が知りたい
0714デフォルトの名無しさん
2007/11/02(金) 00:08:000715デフォルトの名無しさん
2007/11/02(金) 11:09:23あ〜、それ気付かなかった。
ハンドル保持クラスのoperator bool()使ってたからすっかり忘れてた・・・。
224はバグだね。
0716デフォルトの名無しさん
2007/11/02(金) 11:22:090717デフォルトの名無しさん
2007/11/02(金) 11:45:51{
if(a){
b=a;
}else{
//延々と長いコード
・・・
・・・
・・・
}
return 0;
}
普通、if(a)のところでreturn 0するだろ・・・。
0718デフォルトの名無しさん
2007/11/02(金) 11:48:08さんざん既出
0719デフォルトの名無しさん
2007/11/02(金) 11:52:07こんな感じ。ifとかで直に使えるようにするやつ。
class auto_win32file {
...
~auto_win32file(){ if(*this){CloseHandle(h);} }
operator bool(){ return h!=INVALID_HANDLE_VALUE; }
};
auto_win32file h( CreateFile(...) );
if(h){ // if( h.operator bool() ) が呼ばれる
//開けた時の処理など
}
0720デフォルトの名無しさん
2007/11/02(金) 13:22:20flg=a;
}
if(flg==a){
・・・
}
なんで別けるの?
ああああリファクタリングしてええええ
0721デフォルトの名無しさん
2007/11/02(金) 13:23:34それは しゅぎょう です (^o^)□
0722デフォルトの名無しさん
2007/11/02(金) 13:52:06よくわからんが・・・、
a がfalse で flgがfalse の時も・・・処理をしたいって事なのかな・・・?
しかしそれなら
if(a || (a == flg)){
・・・
}
でいいか・・・。
0723デフォルトの名無しさん
2007/11/02(金) 14:05:07ifを二つに分けてるって事?
0724デフォルトの名無しさん
2007/11/02(金) 14:08:17推測の域を出ないが、
a=true flg=true
a=true flg=false
a=false flg=false
の時だけ処理したいのかも。
0725デフォルトの名無しさん
2007/11/02(金) 15:19:092つめのif文の時点で
a=true flg=false
となることはない。
つまり>>722でいい
0726デフォルトの名無しさん
2007/11/02(金) 15:26:15}
if( a || !flg){
}
0727デフォルトの名無しさん
2007/11/02(金) 21:32:23if (n == 0)
{
//nが変わらない処理
}
if (n == 1)
{
//nが変わらない処理
}
if (n == 2)
{
//nが変わらない処理
}
ちなみに、//の処理内容は仕様上絶対にnが変わるはずのないものだった……
なんで、こんな処理してるんやろ……
0728デフォルトの名無しさん
2007/11/02(金) 21:37:050729デフォルトの名無しさん
2007/11/02(金) 21:57:15その外側をforで回しているのであれば良くあるコードと思う。
0730デフォルトの名無しさん
2007/11/02(金) 22:00:330731デフォルトの名無しさん
2007/11/02(金) 22:02:180732デフォルトの名無しさん
2007/11/02(金) 22:09:24どちらかというと、ヘタだと思うその判断の方が微妙!
0733デフォルトの名無しさん
2007/11/02(金) 22:41:47そこだけ、を見れば変かもしれんが、もうちょっと前後の文脈がわからんと
何とも言えんな。
0734デフォルトの名無しさん
2007/11/02(金) 22:52:450735デフォルトの名無しさん
2007/11/02(金) 22:57:07switch(n){
case 1:
case 2:
case 3:
//nが変わらない処理
break;
}
0736デフォルトの名無しさん
2007/11/02(金) 23:05:00if (a >= 1 && a <= 3) {
//nが変わらない処理
}
0737デフォルトの名無しさん
2007/11/02(金) 23:09:36たとえば2の時は別の処理にしたいとかなった時とかさ、面倒かなと思って。
0738デフォルトの名無しさん
2007/11/02(金) 23:28:28if (n == 0){
//処理1
} if (n == 1) {
//処理2
} if (n == 2) {
//処理3
}
となっていて、この処理と
if (n == 0) {
//処理1
} else if (n == 1) {
//処理2
} else if (n == 2) {
// 処理3
}
//または
switch (n)
{
case 0:
//処理1
break;
case 1:
処理2
break;
……
}
は全く等価なんだわ。こういう場合って、if文を三つ並べるより、「一まとまりになってるんだぞ」って分かりやすくするために、
else if を使うか、switchを使うべきなんじゃないかと思ってな……>>734のこともあるしね
0739デフォルトの名無しさん
2007/11/02(金) 23:30:24//処理1
} if (n == 1) {
//処理2
} if (n == 2) {
//処理3
}
あとで処理1にnを変更する処理が追加される可能性があるとかじゃね?
0740デフォルトの名無しさん
2007/11/02(金) 23:31:18以前居た現場で800行をif文で綺麗に2分割されたソースの片方が仕様変更で不要になったにも関わらず
コメント化して残せと言われたときは泣きたくなった
0741デフォルトの名無しさん
2007/11/02(金) 23:32:30そうだとしてもn==0の時あとの二回のifは無駄でしょ
0742デフォルトの名無しさん
2007/11/02(金) 23:34:42上でも書いたが、それは絶対にないソースコードだったのよ。仕様上もコード上もありえなかった。
0743デフォルトの名無しさん
2007/11/02(金) 23:37:130744デフォルトの名無しさん
2007/11/02(金) 23:42:530745727
2007/11/02(金) 23:49:35さして気にならんか。この手の事を気にしている俺がおかしいのかね。
ちなみに俺はelse ifかswitchと書いたが、switch派だったりするわけだが、
ここら辺もあまりこだわる必要なさげ?
0746デフォルトの名無しさん
2007/11/02(金) 23:51:300747デフォルトの名無しさん
2007/11/02(金) 23:52:220748デフォルトの名無しさん
2007/11/02(金) 23:52:27if-else か switchかは前後関係や変数の取りうる範囲によるなぁ。
0749デフォルトの名無しさん
2007/11/03(土) 00:20:56break がもったいない。
while ((ch = なんとか)) {
switch (かんとか) {
case うんこ:
break;
case まんこ:
break;
case EOF:
ここで while から抜けたい。
break;
}
}
こういうとき while から break 使ってスマートに抜け出せないんだよね。
貴重な break を switch ごときで無駄遣いしたくない、って感じ。
0750デフォルトの名無しさん
2007/11/03(土) 00:30:52たぶん、while文の中に、switch文を直に入れてるからスマートじゃないんだと...
関数でswitch文の処理を呼び出した方がスマートじゃね?
while (ch = 何とか){
if (hoge(かんとか)) break;
}
0751デフォルトの名無しさん
2007/11/03(土) 00:33:120752デフォルトの名無しさん
2007/11/03(土) 00:36:520753デフォルトの名無しさん
2007/11/03(土) 00:37:400754デフォルトの名無しさん
2007/11/03(土) 00:37:490755デフォルトの名無しさん
2007/11/03(土) 00:41:450756デフォルトの名無しさん
2007/11/03(土) 00:48:090757デフォルトの名無しさん
2007/11/03(土) 00:58:45label1:
while (なんとか) {
switch (かんとか) {
case うんこ:
break;
case まんこ:
break;
case EOF:
break label1; //← これ
}
}
(ここへ飛んでくる)
こんなの、死んでも使いたくない!
素直に goto 文使った方がよっぽど分かりやすいと思う。
0758デフォルトの名無しさん
2007/11/03(土) 01:18:17使うならエラー判定してエラーなら一気に終了させるとかそんな時だけだろ
0759デフォルトの名無しさん
2007/11/03(土) 01:52:11スミマセンスミマセン
0760デフォルトの名無しさん
2007/11/03(土) 02:00:54こんなのはどう?
while ((ch = なんとか)) {
switch (かんとか) {
case うんこ:
continue;
case まんこ:
continue;
case EOF:
break;
}
break;
}
0761デフォルトの名無しさん
2007/11/03(土) 03:08:12switch含むコードを関数に切りゃいいじゃねーか。
0762デフォルトの名無しさん
2007/11/03(土) 04:07:440763デフォルトの名無しさん
2007/11/03(土) 04:43:24http://www.youtube.com/watch?v=9OHe2h3sZL0
0764デフォルトの名無しさん
2007/11/03(土) 11:40:43http://news22.2ch.net/test/read.cgi/newsplus/1194055647/
イーバンク 2ちゃんねるでの「信用棄損」書き込み相次ぐ 法的手段にも?
http://news23.2ch.net/test/read.cgi/news/1194046951/
【eBANK】イーバンク銀行【part64】
http://money6.2ch.net/test/read.cgi/money/1194025320/
イーバンク銀行終了のお知らせ 6引き出し目 【ATM利用手数料0円→210円】
http://news23.2ch.net/test/read.cgi/news/1194011393/
【社会】 「かなり痛い改悪」 イーバンク銀行、ATM手数料有料へ…ネットで厳しい声★5
http://news22.2ch.net/test/read.cgi/newsplus/1194004693/
【金融】イーバンク銀行、ATM利用手数料変更ヘ…入出金問わず取引手数料1件210円★2[07/10/31]
http://news21.2ch.net/test/read.cgi/bizplus/1193866049/
イーバンクの手数料が有料になるんだが
http://news21.2ch.net/test/read.cgi/slotk/1193831879/
イーバンク利用手数料変更のお知らせ 0円→210円
http://pc11.2ch.net/test/read.cgi/yahoo/1193809148/
イーバンク終了のお知らせ【入出金手数料有料化】
http://hobby10.2ch.net/test/read.cgi/uma/1193808272/
【入出金】イーバンク銀行終了【手数料210円】
http://money6.2ch.net/test/read.cgi/kyotei/1193832909/
IPAT専用銀行、イーバンク銀行終結のお知らせ
http://ex23.2ch.net/test/read.cgi/keiba/1193808644/
【VISAデビ】イーバンクマネーカード22枚目
http://life8.2ch.net/test/read.cgi/credit/1193994930/
toto専用銀行、イーバンク銀行終了のお知らせ
http://ex20.2ch.net/test/read.cgi/soccer/1194007178/
イーバンク銀行、ATM利用手数料変更ヘ
http://hobby10.2ch.net/test/read.cgi/point/1193832366/
0765デフォルトの名無しさん
2007/11/04(日) 15:07:43それを左辺定数の根拠にするのも間抜けだな
そんなの、間抜けなコンパイラ実装者が、!演算子をビット演算子としてのnotに
しないように強調してるだけじゃん
0766デフォルトの名無しさん
2007/11/04(日) 19:15:41例えば、設定しだいで分岐を変える場合:
#ifdef CONFIG_UNKO
if (strcmp(s, "unko") == 0){
//処理1
}else
#endif
if (strcmp(s, "kuso") == 0) {
//処理2
}
#ifdef CONFIG_UNKO
}
#endif
よりも、下のほうがわかりやすいということはある。
#ifdef CONFIG_UNKO
if (strcmp(s, "unko") == 0){
//処理1
}
#endif
if (strcmp(s, "kuso") == 0) {
//処理2
}
0767デフォルトの名無しさん
2007/11/04(日) 20:32:48if ("add".equalsIgnoreCase(s)) {
処理1
} else if ("sub".equalsIgnoreCase(s)) {
処理2
} else if ("mul".equalsIgnoreCase(s)) {
処理3
} else if ("div".equalsIgnoreCase(s)) {
処理4
} else if ("+=".equalsIgnoreCase(s)) {
処理5
} else if ("-=".equalsIgnoreCase(s)) {
処理6
} else・・・以下、延々と続く
0768デフォルトの名無しさん
2007/11/04(日) 21:24:55switch文にしろif文にしろそうだけど。
数千行にも及ぶのはカンベンして欲しい。
tokenの種類に応じた、分割統治とかそういうコーディングを
おぼえて欲しい。どうしても分割統治しづらいなら、
せめて処理を関数に分けて以下のようにしてくれ。
関数呼び出しのオーバヘッドが気になるなら、inlineに
でもすればい。
if ((handler = GetHandler(token)) == NULL) {
return ERROR;
}
ret = handler(args);
0769デフォルトの名無しさん
2007/11/04(日) 22:05:09最初にtoLowerCase()して子文字列と較べるべき、
と言う話ではなかったのか・・・
0770デフォルトの名無しさん
2007/11/04(日) 22:08:32そんなんぶっちゃけドッチデモイイ
0771デフォルトの名無しさん
2007/11/04(日) 23:44:35switchのままのほうがよくヒットするものを先にチェックするように
なる「かもしれない」けど、そういう環境ばかりではないだろうしなー。
0772デフォルトの名無しさん
2007/11/05(月) 00:08:57GetHandler(token)の内容が、じつは
#defne GetHandler g_functable[token]
とかだったら、それよりも高速だな。
0773デフォルトの名無しさん
2007/11/05(月) 01:12:12漏れもそうオモタ。
"-=".equalsIgnoreCase(s) なんて笑っちゃうよね。
大文字も小文字もカンケー無いだろw
0774デフォルトの名無しさん
2007/11/05(月) 01:16:340775デフォルトの名無しさん
2007/11/05(月) 01:20:030776デフォルトの名無しさん
2007/11/05(月) 01:21:270777デフォルトの名無しさん
2007/11/05(月) 01:34:01分割統治できないプログラムかくやつは、まだ素人。
0778デフォルトの名無しさん
2007/11/05(月) 01:46:10if ("add".equalsIgnoreCase(token)) {
return AddHandler;
} else if ("sub".equalsIgnoreCase(token)) {
return 略;
} else if ("mul".equalsIgnoreCase(token)) {
return 略;
} ...
}
0779デフォルトの名無しさん
2007/11/05(月) 01:48:14handler GetHandler(token){
if ("add".equalsIgnoreCase(token)) {
return AddHandler;
} else if ("sub".equalsIgnoreCase(token)) {
return 略;
} else if ("mul".equalsIgnoreCase(token)) {
return 略;
} ...
}
0780デフォルトの名無しさん
2007/11/05(月) 01:49:52add,
sub,
mul
}
str="add"
switch(Hoge.valueOf(str)){
add: ...
sub: ...
mul: ...
}
0781デフォルトの名無しさん
2007/11/05(月) 01:51:090782デフォルトの名無しさん
2007/11/05(月) 01:56:49tokenが、文字列とかだったらハッシュとか使えよ。もしくは、初期化時に
テーブル構築して、文字列からIDに変換しておけばすむだけ。
0783デフォルトの名無しさん
2007/11/05(月) 01:58:13イミフメ
0784デフォルトの名無しさん
2007/11/05(月) 01:58:370785デフォルトの名無しさん
2007/11/05(月) 02:06:36>ハッシュとか
個数が少ないとフルスキャンの方が早かったりする。多くなったら勿論ハッシュ
>初期化時にテーブル
enum switchなどと違ってテーブルの分、メモリに常駐するから気分的にちょっと
どちらも微々たる物って分かってます サーセンw
でも早過ぎる最適化かな
0786デフォルトの名無しさん
2007/11/05(月) 02:12:46if(expr){
...
}
else if(expr){
...
}
else {
...
}
メリット:行がブロック単位に綺麗に分かれるなど
デメリット:行数が増える
0787デフォルトの名無しさん
2007/11/05(月) 02:14:34javaだと関数ポインタが使えないのでどうするのが正しいんだろう?
1)HashMapで関数名を取得してリフレクションする
2)クラスを作りまくって>>778
3)commons.chainを使う
4)文脈に応じて次のトークンを予想して処理する
5)その他
0788デフォルトの名無しさん
2007/11/05(月) 02:29:47ハッシュ使うまでもない、文字列からIDに変換しておく必要もないなら、
ループですませればいいだけやん。778や779よりよっぽど読みやすいと思う。
struct functable g_functable[] = {
{"add", add_handler},
...
};
struct handler*
GetHandler(char *name)
{
int i;
for (i = 0; i < NITEM(g_functable); i++) {
if (strcmp(g_functable[i].name, name) == 0) {
return &g_functable[i].handler;
}
}
returnNULL;
}
0789デフォルトの名無しさん
2007/11/05(月) 02:34:39それだとコードがハッシュされちゃうんだよね
0790デフォルトの名無しさん
2007/11/05(月) 02:43:20>ハッシュされちゃう
日本語でオケ
0791デフォルトの名無しさん
2007/11/05(月) 03:22:58リフレクションする意味がわからん
単にvalueにファンクタputして呼べばいいだけとちがうか?
関数ポインタつってもインタフェースわかってなきゃ使えないことに違いはないし
0792デフォルトの名無しさん
2007/11/05(月) 12:38:10あーなるほど、無駄に行数増えることに目を瞑ってまで自分の美意識を優先させるスタイルなわけですね。
別に否定はしませんが、私は自分の美意識と行数節約が合致するので、改行しないスタイルでいきますから。
0793デフォルトの名無しさん
2007/11/05(月) 13:14:11つCommandパターン
0794デフォルトの名無しさん
2007/11/05(月) 14:58:14というか、defineしたのを行き渡らせるやつ。
void valueset(int *a) {
int i;
for (i =0; i < N; i++) a[i] = i;
}
void printall(int *a) {
int i;
for (i = 0; i < N; i++) printf("%d\n",a[i]);
}
int main() {
int a[N];
valueset(a);printall(a);
return 0;
}
とか。こんなんするくらいなら
void valueset(int *a, int size);
void printall(int *a, int size);
にしておいて、
valueset(a, sizeof(a));
printall(a, sizeof(a));
として使い、
int a[32];
と、ここに書き込んじゃっていいくらいだ。
0795デフォルトの名無しさん
2007/11/05(月) 15:06:53sizeof(a) / sizeof(int)
0796デフォルトの名無しさん
2007/11/05(月) 15:08:260797デフォルトの名無しさん
2007/11/05(月) 15:09:11それを書くなら、sizeof a / sizeof a[0]が定石。
0798デフォルトの名無しさん
2007/11/05(月) 16:17:09俺はそうする派なんだが、それに加えて制御文はどんなときでも{}でくくりたい気持ちが
強いせいでこうするときもある
if(expr){
...
}
else{
if(expr){
...
}
}
else {
...
}
どうだ、さすがにこれはヘタだろ
0799デフォルトの名無しさん
2007/11/05(月) 17:17:570800デフォルトの名無しさん
2007/11/05(月) 18:03:100801デフォルトの名無しさん
2007/11/05(月) 18:55:53なんでそんなにキレてるの?
0802デフォルトの名無しさん
2007/11/05(月) 19:05:07foo();
else{
bar();
hoge();
}
if( a ){
foo();
}
else{
bar();
hoge();
}
どっちがいいか
0803デフォルトの名無しさん
2007/11/05(月) 19:33:490804デフォルトの名無しさん
2007/11/05(月) 19:48:250805デフォルトの名無しさん
2007/11/05(月) 21:29:240806デフォルトの名無しさん
2007/11/05(月) 21:33:410807デフォルトの名無しさん
2007/11/05(月) 21:35:43foo();
}else{
bar();
hoge();
}
やっぱ普通がいちばん
0808デフォルトの名無しさん
2007/11/05(月) 22:45:26だって「瞑ってまで」とか「いきますから」とか敵意剥き出しじゃんw
0809デフォルトの名無しさん
2007/11/05(月) 22:50:06それコンパイル出来ないんじゃね?
括弧の位置間違っただけだと思うけど
0810デフォルトの名無しさん
2007/11/05(月) 23:00:37if(!cSystem != "a"){}
とか理解に時間のかかるコードは糞と思ってる俺は異常か?
0811デフォルトの名無しさん
2007/11/05(月) 23:08:44hogeの定義を追ってみたら、bool operator !()constしか定義されてなかった(w
0812デフォルトの名無しさん
2007/11/05(月) 23:36:02嫌がらせw
0813798
2007/11/05(月) 23:39:07ああ、んだね。インデントを付けてない弊害が出た。
if(expr){
...
}
else{
if(expr){
...
}
else{
...
}
}
0814デフォルトの名無しさん
2007/11/05(月) 23:45:33でも
if(hoge){}
と出来るようにするのは簡単じゃないからね
まあ、イディオムがあるけど
0815デフォルトの名無しさん
2007/11/05(月) 23:45:520816デフォルトの名無しさん
2007/11/06(火) 00:00:30int *p;
for( i=0 ; i<4 ; i++ )
{
if( i==0 )
{
p = hoge();
break;
}
if( i==1 )
{
p = hoge2();
break;
}
if( i==2 )
{
p = hoge3();
break;
}
}
こうじゃだめなの?
int *p = null;
if(!p)p = hoge();
if(!p)p = hoge2();
if(!p)p = hoge3();
0817デフォルトの名無しさん
2007/11/06(火) 00:05:06おれはこんな感じかな。
1. インターフェースいっこ作る
2. 名前に対応する処理を無名クラスで実装してMapに詰める
3. 使うときに名前でgetする
無名クラスにするかどうかは処理の大きさ次第。
相当大きくなるならFactoryとして分離。
0818デフォルトの名無しさん
2007/11/06(火) 00:24:120819デフォルトの名無しさん
2007/11/06(火) 00:41:00本気でバカだと思う
0820デフォルトの名無しさん
2007/11/06(火) 00:57:14上と下が等価じゃなくね?たぶん勘違いだと思うけど・・・
俺ならこんな感じか?
関数ポインタってこんな宣言でよかったっけ?
int * ( * func[] )( void ) = { hoge, hoge1, hoge2 };
for( i = 0 ; i < 3 ; i++ )
{
if ( ( p = func[ i ]( ) ) != 0 ) break;
}
0821デフォルトの名無しさん
2007/11/06(火) 01:04:11Javaの思想はわかるけど、単なる関数テーブルの呼び出しにも、
クラスを大量に作るとかダサイよな。
0822デフォルトの名無しさん
2007/11/06(火) 01:05:11「大量に作る必要があるのはダサイよな」に訂正
0823デフォルトの名無しさん
2007/11/06(火) 01:06:180824デフォルトの名無しさん
2007/11/06(火) 01:15:29ライブラリの規模によっては、牛刀をもって鶏を裂く類いのものだな。
0825デフォルトの名無しさん
2007/11/06(火) 01:17:520826デフォルトの名無しさん
2007/11/06(火) 01:20:300827デフォルトの名無しさん
2007/11/06(火) 01:37:37クロージャが早く欲しいですな。
ついでにデフォルト引数も使えるようになって欲しい。
0828デフォルトの名無しさん
2007/11/06(火) 02:20:30無名クラスぐらいだと、クラスを作ってるって感覚はないけどなぁ。
処理が大きいんならちゃんと名前付けたいし。
getter, setterの方がよっぽど気になる。
0829デフォルトの名無しさん
2007/11/06(火) 02:33:25とりあえずメソッドの実行(と参照)は java.util.reflection.Method#invoke() でほとんど出来るから問題ないとして
話がC++/C/Javaに集中しているのにワロタ
0830デフォルトの名無しさん
2007/11/06(火) 03:03:24>C++/C/Javaに集中してる
C#,Perl,Rubyとかの話してもしょうがないだろう。
0831デフォルトの名無しさん
2007/11/06(火) 05:49:370832デフォルトの名無しさん
2007/11/06(火) 06:59:440833デフォルトの名無しさん
2007/11/06(火) 18:28:41110 IF A=1 THEN ELSE 190
120 GOSUB*はげ
130 PRINT "ほげ"
140 処理・・・
190 'endif
この IF THEN ELSE の使い方に感動した事がある。
0834デフォルトの名無しさん
2007/11/06(火) 20:04:360835デフォルトの名無しさん
2007/11/06(火) 21:21:490836デフォルトの名無しさん
2007/11/06(火) 21:57:03p || (p = hoge()) || (p = hoge2()) || (p = hoge3());
とか書いちゃうもんね♪
0837デフォルトの名無しさん
2007/11/06(火) 22:03:150838デフォルトの名無しさん
2007/11/06(火) 22:35:38よくわからんのだが...
int *p;
p = hoge();
でいいんじゃないのか?
ループが全く無駄に見えるんだが...
for(i = 0 ; i < 4 ; i++)
{
if (i == 0){ // iの初期値は0なんですが
p = hoge();
break; // たぶん、ここでループが終わってるよね?
}
}
違う?
0839デフォルトの名無しさん
2007/11/06(火) 23:44:41会社でどんな教育受けたか知らないし、まだ学生なのかはわからんが。
行 数 な ん て ど う で も い い
ことを、まず理解しる。
もしあなたが、仕事を発注する立場にあるとして、代金を行数ベースで
払うように会社の指示があるとしたらそれは不幸だ。
0840デフォルトの名無しさん
2007/11/06(火) 23:47:210841デフォルトの名無しさん
2007/11/06(火) 23:49:48しらねーけど、「行数を稼ぐ目的」とか「無駄に行数を稼ぐ」
とかいう発言の意図を考えると、そうなんじゃないかなと・・・。
0842デフォルトの名無しさん
2007/11/06(火) 23:49:53学生でも行数なんてどうでもいいことは理解してるよ。
0843デフォルトの名無しさん
2007/11/07(水) 00:20:150844デフォルトの名無しさん
2007/11/07(水) 00:21:44何か言ってる人が居るよ
0845デフォルトの名無しさん
2007/11/07(水) 00:24:31確かにちょいと離れてるから俺もはじめは???になったけど
0846デフォルトの名無しさん
2007/11/07(水) 00:26:360847デフォルトの名無しさん
2007/11/07(水) 00:29:02どっちでもいいけど、
>私は自分の美意識と行数節約が合致するので、改行しないスタイルでいきますから。
↑頭わるそうだな
0848デフォルトの名無しさん
2007/11/07(水) 00:30:190849デフォルトの名無しさん
2007/11/07(水) 00:32:080850デフォルトの名無しさん
2007/11/07(水) 00:50:070851デフォルトの名無しさん
2007/11/07(水) 01:01:300852デフォルトの名無しさん
2007/11/07(水) 01:55:330853デフォルトの名無しさん
2007/11/07(水) 03:33:12foo();
}else{
bar();
hoge();
}
は、
a && (foo(), 1) || (bar(), 1) && (hoge(), 1);
と書けば一行ですむね。
YATTA!YATTA!
0854デフォルトの名無しさん
2007/11/07(水) 03:39:52お馬鹿なコンパイラ(BCC5.9.2)を使ったら後者のコードはわざわざalに01h
をロードしてtestしてた
0855デフォルトの名無しさん
2007/11/07(水) 03:47:37無駄なのにね
0856デフォルトの名無しさん
2007/11/07(水) 03:48:28Perlな人が好みそうなキモさだな
0857デフォルトの名無しさん
2007/11/07(水) 03:51:53#define assert(exp) (void)( (exp) || (_assert(#exp, __FILE__, __LINE__), 0) )
0 は残るんかいね。
0858デフォルトの名無しさん
2007/11/07(水) 03:55:11BCC5.9.2、VC8.0では残ります
0859デフォルトの名無しさん
2007/11/07(水) 03:58:51#define assert(exp) if(exp) { } else { _assert(#exp, __FILE__, __LINE__); }
では駄目だったのだろうか。
0860デフォルトの名無しさん
2007/11/07(水) 04:06:00あれ、VC7.1だけど、>>853のコード、最適化かけたら 1 消えたぞ。
0861デフォルトの名無しさん
2007/11/07(水) 04:07:380862デフォルトの名無しさん
2007/11/07(水) 04:08:00a && (rand(), 1) || (rand(), 1) && (rand(), 1);
00413461 call rand (4EF1E2h)
00413466 test eax,eax
00413468 jne wWinMain+2Fh (41346Fh)
0041346A call rand (4EF1E2h)
0041346F call rand (4EF1E2h)
By VC7.1
0863デフォルトの名無しさん
2007/11/07(水) 04:11:110864デフォルトの名無しさん
2007/11/07(水) 04:13:02すまん最適化掛けてなかった。
掛けたら関数の中身が空なら一行になってしまったし、中身ありでも
,1 は消えた。BCC5.9.2は相変わらず糞。
0865デフォルトの名無しさん
2007/11/07(水) 04:41:30int foo(), bar(), hoge();
a ? foo() : (bar(), hoge());
じゃダメ?
0866デフォルトの名無しさん
2007/11/07(水) 05:18:20というのも、長くなったとき、縦に崩したくなるかもしれないからな。
is_hoge_hoge_manangement_systematic_software_engine_long_long_flag
&& (foooooooooooo0o0o0o000oooooo(wwwwwwwwwwwwwwwwwwwwwww, orzzz__lol), 808)
|| (baaaaaaaaaaaaaaarrrrRrrrrRRrrrrrr(wwwwwwwwwwwwwwwwwwwwwww, orzzz__lol), 893)
&& (hoGeeeeeEEeeeeeeeeeeeeeeeee(wwwwwwwwwwwwwwwwwwwwwww, orzzz__lol), 801);
なんつったりして
0867デフォルトの名無しさん
2007/11/07(水) 14:04:100868デフォルトの名無しさん
2007/11/07(水) 19:11:51って
a && (foo(), 1) || (bar(), hoge());
↑みたいにしちゃダメ?
処理系によってbarとhogeの実行順序が入れ替わる
可能性があるからダメってこと?
0869デフォルトの名無しさん
2007/11/07(水) 20:00:55下手ではないんだろうけど読みづらすぎる
0870デフォルトの名無しさん
2007/11/07(水) 20:24:17しかも、その関数の中身がSleepやらファイルアクセスやらで……
0871デフォルトの名無しさん
2007/11/07(水) 21:08:12for(int i=0; i<10; ++i){
switch(i){
case 0:
〜〜
case 1:
〜〜
・
・
・
}
}
こういうのだろ。
0872デフォルトの名無しさん
2007/11/07(水) 21:16:260873デフォルトの名無しさん
2007/11/07(水) 21:21:580874デフォルトの名無しさん
2007/11/07(水) 21:44:02そんなん書く馬鹿いるんだ……それを放置しておく所って、どんな場所だよ。
そこまで馬鹿だと、教育した人間の方も気になるな
0875デフォルトの名無しさん
2007/11/07(水) 21:46:47俺学生だから。
0876デフォルトの名無しさん
2007/11/07(水) 21:52:43for(int i=0;
i==0 && (hogehoge0(), 1)
|| i==1 && (hogehoge1(), 1)
|| i==2 && (hogehoge2(), 1)
|| i==3 && (hogehoge3(), 1)
|| i==4 && (hogehoge4(), 1)
|| i==5 && (hogehoge5(), 1)
|| i==6 && (hogehoge6(), 1);
++i);
邪道すぐる
0877デフォルトの名無しさん
2007/11/07(水) 21:55:060878デフォルトの名無しさん
2007/11/07(水) 21:55:170879デフォルトの名無しさん
2007/11/07(水) 21:55:38(hogehoge0(), 1)ってどう解釈すればいいのでしょうか?
0880デフォルトの名無しさん
2007/11/07(水) 22:02:27カンマ演算子
0881デフォルトの名無しさん
2007/11/07(水) 22:06:47マクロ使えば?
#define m(statements) { statements ; foo(); }
m(
hoge();
for(int i=0; i<10; ++i){}
)
m(
piyo();
bar();
)
#undef m
0882デフォルトの名無しさん
2007/11/07(水) 22:07:080883デフォルトの名無しさん
2007/11/07(水) 22:24:45>853 にはいっぱい感動した。
0884デフォルトの名無しさん
2007/11/07(水) 23:44:05void func()
{
int loopCounter;
char NUL[1] = {0x00};
char octet1[1] = {0x12};
char octet3[1] = {0x34};
memset(HEDER, 0x00, sizeof(HEDER));
for (loopCounter = 0; loopCounter < 10; loopCounter++) {
switch (loopCounter) {
case 0:
memcpy(& HEDER[loopCounter], octet1, 1);
break;
case 2:
memcpy(& HEDER[loopCounter], octet3, 1);
break;
default:
memcpy(HEDER + loopCounter, NUL, 1);
}
}
#if DEBUG
printf("%s\n", HEDER);
#endif
}
// つっこみどころが多すぎてもうね。
0885デフォルトの名無しさん
2007/11/07(水) 23:54:160887デフォルトの名無しさん
2007/11/08(木) 00:41:11少なくともmemcpyはswitchのあと一か所にまとめたいな。
0888デフォルトの名無しさん
2007/11/08(木) 00:54:08無駄なifとか入れてコード短くなったとか喜んでるアホが
0889デフォルトの名無しさん
2007/11/08(木) 01:26:01>void func()
>{
>int loopCounter;
===========ここまで読んだ========
0890デフォルトの名無しさん
2007/11/08(木) 11:10:01else の前のセミコロンが溜まらなく気持ち悪いのだが
C系から入った人間は何も思わないんだろうか
0891デフォルトの名無しさん
2007/11/08(木) 11:19:400892890
2007/11/08(木) 11:49:52それってPascal系のこと?
俺としては、if文【if 式 then 文 else 文】の終わりに付けるって意味で
elseの前(=if文の途中)にセミコロンは無いのが自然なのだけれど。
C系の場合はif文とelse文は別の文って考えるのかな?
0893890
2007/11/08(木) 11:52:27elseを次の行に持ってくるスタイルにも疑問持ってしまうワケです。
「else は if の一部なのになんで次の行に持ってくるかなぁ」と。
0894デフォルトの名無しさん
2007/11/08(木) 12:40:01a && (foo(), 1) || (bar(), hoge(), 1);
じゃないか?
;
セパレータとターミネータの違いだからどーでもいいかな
0895デフォルトの名無しさん
2007/11/08(木) 12:53:20セミコロンってのは「;」だよな?
if(exp);
else{
...
}
こういうことか?
これは確かに気持ち悪いな、素直に論理否定使えよと言いたくなる
「}」のことならあまり深いことは考えてないんじゃないか
そういうことする奴でdo-whileとかtry-catchとかと一致させてない奴も多いし
0896デフォルトの名無しさん
2007/11/08(木) 18:30:50簡易的に書くと
if構造: if(式) 文 else 文
文 : {文*} | 式;
という感じ
elseif構文そのものは無いが、else ifのネストを利用して
擬似的に表現するのは定石の一つなので
if(式) 文
else if(式) 文
else 文
これは変じゃないよな?
そして↑の各行を複数行(文→{文*})で書くと以下のようになる
//if(式) 文
if(式){
文*
}
//else if(式) 文
else if(式){
文*
}
//else 文
else{
文*
}
0897デフォルトの名無しさん
2007/11/08(木) 18:32:15もしくは
//if(式) 文
if(式)
{
文*
}
//else if(式) 文
else if(式)
{
文*
}
//else 文
else
{
文*
}
というのを考えて、elseの前に
改行を入れるのは変じゃないと思った
0898デフォルトの名無しさん
2007/11/08(木) 18:44:42elseの前に改行というより、
文の後に改行を入れる。
つまり}の後に改行を入れるのは変じゃないと思う、と言いたかった
0899デフォルトの名無しさん
2007/11/08(木) 18:46:360900デフォルトの名無しさん
2007/11/08(木) 19:23:20文;
} else if (・・・) {
文;
} else if (・・・) {
文;
} else {
文;
}
if (・・・)
{
文;
}
else if (・・・)
{
文;
}
else if (・・・)
{
文;
}
else
{
文;
}
どっちかに統一しとけば問題ない。
0901デフォルトの名無しさん
2007/11/08(木) 19:25:47文;
}
else if (・・・) {
文;
}
else if (・・・) {
文;
}
else {
文;
}
これは見苦しい例。改行するのか、しないか、どっちかハッキリしろ!
0902デフォルトの名無しさん
2007/11/08(木) 19:30:09if 〜 else 〜
って構文じゃないと駄目って事か?
お前年幾つだよ!!!
コボルじゃ、わりと早いうちにブロックifになってたし、
今じゃBASICですら、ブロックifが主体で、1行のif文なんてお目にかかることが無いというのに...
0903デフォルトの名無しさん
2007/11/08(木) 19:37:14すごいなあw
0904デフォルトの名無しさん
2007/11/08(木) 19:55:11「文;」の時点で理解出来てないだろ。
c言語のBNF書式での定義をまず見てきた方が良い。
statementには;は付かない、
exprに;を付けたものはstatementの一つ。
つまり文(statement)の終わりは"}"か";"だ
>>901
statementの終わりに改行とハッキリしてる
0905デフォルトの名無しさん
2007/11/08(木) 20:00:46誰が見てもあきらかにヘタなコード晒そうぜ。
自分が1年目に書いたコードをここにコピペするだけでいいんだから、簡単。
0906デフォルトの名無しさん
2007/11/08(木) 20:02:24898だけ読んだなら良いけど、
>>896-898読んだ上で、そう解釈したのなら話のしようがないぞ・・・
0907デフォルトの名無しさん
2007/11/08(木) 20:05:23>1年目に書いた
確かにw
0908デフォルトの名無しさん
2007/11/08(木) 20:08:04ぼうや、人の揚げ足とるのがそんなに楽しいの?
それを言うなら、「文*」 の方がよっぽどおかしいね。掛け算の右辺が無い。明らかに構文エラーwww
おまい、Cコンパイラを実際に使ったこと無いな?教科書読んだだけだろ?
アタマデッカチ!
0909デフォルトの名無しさん
2007/11/08(木) 20:14:17最後の行といい、頭悪そうレスだな・・・。
あと、sageようぜ。
0910デフォルトの名無しさん
2007/11/08(木) 20:18:57当時のパソコンどこにあるかわかんないよ
0911デフォルトの名無しさん
2007/11/08(木) 20:22:40それはクリーネスターを援用しただけで、897は擬似コードだろ。
0912デフォルトの名無しさん
2007/11/08(木) 20:30:560913デフォルトの名無しさん
2007/11/08(木) 20:31:52>>896-898では、ちゃんとした、ブロックif式になっているのに、elseの前に改行があるのが許せないんだろ?
つまり、1行ifが好みって事じゃないのか?
0914デフォルトの名無しさん
2007/11/08(木) 20:32:49マイクロソフトかい?ボーランドかい?どうせGNUだろw
0915デフォルトの名無しさん
2007/11/08(木) 20:36:190916デフォルトの名無しさん
2007/11/08(木) 20:40:32確認だけど、>>902は>>898宛だよな?
>>898は>>897の最後の言い方を訂正しただけなんだけど・・・。
むしろelseの前に改行があって良いと、と言っているんだよ。
0917デフォルトの名無しさん
2007/11/08(木) 20:50:43禁止ネタ(超既出)
・記述スタイル
ということでここまで
0918デフォルトの名無しさん
2007/11/08(木) 21:17:30でレスの傾向が違う気がする。
0919デフォルトの名無しさん
2007/11/08(木) 21:18:420920デフォルトの名無しさん
2007/11/08(木) 21:24:31{ hoge(); huga(); }
は、
begin hoge(); huga() end.
というよりは、
begin hoge() ; huga() end.
な感じだな。(セパレータっぽく見えるように前にも空白を置いてみた)
begin hoge(); huga(); end とすると、
huga()のあとにもう1つ文(空文)があることになる。
0921デフォルトの名無しさん
2007/11/08(木) 21:30:38IF A=1 THEN GOSUB *HOGE : GOSUB *FUGA ELSE GOSUB *GGERO
 ̄
0922デフォルトの名無しさん
2007/11/08(木) 21:32:25if (a == 1) { &hoge(); &fuga() }
 ̄ ここにセミコロンは無くてよい
0923デフォルトの名無しさん
2007/11/08(木) 21:34:56b = 1 *
あれれおかしいぞ。2行目でエラーが出ます。なんで?
0924デフォルトの名無しさん
2007/11/08(木) 21:37:46pascalってPL/SQLとかなり似てるって聞く。
なので違いは一応分かる。
pascal系はむしろ"}"が無いので複数行で書いたら
普通にelseif、elseの前に改行が来ると思う。
0925デフォルトの名無しさん
2007/11/08(木) 21:45:050926デフォルトの名無しさん
2007/11/08(木) 21:54:03そうだよ。だから「pascal系は」って書いた。
出だしからいきなりPL/SQLって単語出すのアレだったから
先にpascalを持ってきただけだよ。
0927デフォルトの名無しさん
2007/11/08(木) 22:07:220928893
2007/11/08(木) 22:08:32荒れる話題を出してしまってすみませんでした。
このレスしたら去ります…。
>>895
>if(exp); else
あ、そういう話ではないです。
>>896
if 式 then 文
else if 式 then 文
else 文;
ならあまり違和感は無いです。
if(式) 文;
else
と来ると結構違和感ありますね。
「if 文終わったと思ったら、続くのかよ!」みたいな。
閉じブレースの件は、C言語だと } の直後にセミコロンを書く必要が無いので
} を脳内変換で end; と読んでしまっているというか、そんな感じですかねぇ…。
0929893
2007/11/08(木) 22:10:05私は >906 では無いですが
C言語のコード読むときに、} や ; を見つけると
そこで文を切りたくなるんですよ。
} else だと流石に、明らかに続いてると分かるのですが
改行を入れられると、} が文末に見えてしまう。
else が来たときに、ぎょっとするんですよ。
>>918
どうやら、そうみたいですねぇ…。
>>919
確かにそこはキモイです。私も。
絶対 end の前の文にもセミコロンは付けてます。
>>920
Pascalのセミコロンはセパレータ、かぁ…なるほど。
確かにそう言われてみればそうなのかも。
へんな話題出してしまって済みませんでした。
もう去ります…。
0930デフォルトの名無しさん
2007/11/08(木) 22:47:17こういうコードって、気持ち悪いと思わないか?
package foo.bar;
import foo.bar.baz;
感覚的には、親クラスの中で子クラスを利用しているのと同じような気持ち悪さだ。
0931デフォルトの名無しさん
2007/11/08(木) 23:14:47package foo.bar;
import foo.bar.baz.*;
0932デフォルトの名無しさん
2007/11/08(木) 23:19:32procedure foo; forward;
procedure bar; forward;
...
if ( cond ) then
begin
foo; {←}
end
else
begin
bar;
end;
ゴメンナサイゴメンナサイ
0933デフォルトの名無しさん
2007/11/08(木) 23:46:37if(a){
}else{
}
ウゲッ。
{
} {
}
0934デフォルトの名無しさん
2007/11/09(金) 00:09:011行80文字まで、1関数20行までとかな...
0935デフォルトの名無しさん
2007/11/09(金) 00:22:44{ 処理A }
else
{ 処理B }
これがいちばん、文法的には正しい。
0936デフォルトの名無しさん
2007/11/09(金) 00:25:020937デフォルトの名無しさん
2007/11/09(金) 00:27:560938デフォルトの名無しさん
2007/11/09(金) 00:29:17if (...) {
...
}
else {
if (...) {
}
else {
if (...) {
}
}
}
このネストが煩わしいから
if () {
}
else if () {
}
else {
}
が好まれるわけで。
いやね、if () の処理が1行でも{}を省くな、って言っている人でも、最初のようにネストさせる人はまずいないんだよね。
0939デフォルトの名無しさん
2007/11/09(金) 00:30:21>>936
0940デフォルトの名無しさん
2007/11/09(金) 00:35:12文法的に間違っていないことは、みんなの共通認識だと思うよ。
それを、得意そうに指摘するのはw
恥ずかしいwww
0941デフォルトの名無しさん
2007/11/09(金) 00:36:410942デフォルトの名無しさん
2007/11/09(金) 00:38:37if (!(...))
if (!(...))
if (!(...))
if (!(...)){
}
else {
}
else {
}
else {
}
else {
}
else {
}
0943デフォルトの名無しさん
2007/11/09(金) 00:40:280944デフォルトの名無しさん
2007/11/09(金) 00:41:430945デフォルトの名無しさん
2007/11/09(金) 00:59:47else return 7; else return 6; else return 5; else return 4;
else return 3; else return 2; else return 1; else return 0;
0946デフォルトの名無しさん
2007/11/09(金) 01:05:05名前空間のつけ方とか
パッケージの割り方とか
イベントの挙動とか
話すことたくさんあるだろうと思うんだが
0947デフォルトの名無しさん
2007/11/09(金) 01:33:0122世紀になってif文が消えた時に後悔し内容に今話しておくんだ
0948デフォルトの名無しさん
2007/11/09(金) 01:49:43}
else if () {
}
else {
}
↑
こんなキモイ書き方、誰も好んじゃいねぇ〜よ!
0949デフォルトの名無しさん
2007/11/09(金) 01:58:220950デフォルトの名無しさん
2007/11/09(金) 02:03:48著しくメンテナンス性が落ちる。
0951デフォルトの名無しさん
2007/11/09(金) 02:20:200952デフォルトの名無しさん
2007/11/09(金) 02:22:36コンパイラが1種類しかない言語がウラヤマシイ。
0953デフォルトの名無しさん
2007/11/09(金) 03:04:57贅沢言うなら、一人で書いたソースは、スタイルが統一
されているとうれしい。
どうせ整形してから読むし。
0954Java2年生
2007/11/09(金) 08:08:17if (flag) {
flag = false;
} else {
flag = true;
}
【〇】
!flag;
0955デフォルトの名無しさん
2007/11/09(金) 08:14:01flag = !flag;
0956デフォルトの名無しさん
2007/11/09(金) 08:16:56do_somthing
end else begin
do_other_things
end
0957デフォルトの名無しさん
2007/11/09(金) 08:25:27互換性を保つのは別のレベルでやれと。
そういう意見じゃないか?
俺はあまりにも低機能なメソッドで構成されたプログラムは嫌だ。
1関数、1行〜5行みたいな。
飛びすぎて読むの疲れるし、push pop 多そうだな、と思って嫌気が差す。
0958デフォルトの名無しさん
2007/11/09(金) 08:27:40インライン展開できないコンパイラをお使いですか?
0959デフォルトの名無しさん
2007/11/09(金) 10:09:07引数が少なくて push pop しないまでも、レジスタへの代入はあるだろうな。
というか、そういうコードを書いてるのか?
0960デフォルトの名無しさん
2007/11/09(金) 10:36:530961デフォルトの名無しさん
2007/11/09(金) 10:46:53>958はどうか知らんが、漏れならこんな関数も作る。
static unsigned offset(unsigned x, unsigned w, unsigned y) {return x + w * h;}
ちなみに、array[offset(x, w, y)]と言う使い方をするわけだが基本的に、array[x + w * h]と書くのと変わらないコードになる。
また、C++なら(当然の如く)ゲッタセッタを書くわけだがこれらもpublicメンバにアクセスするのと何ら変わらない。
つまり、短い関数がスタックやレジスタや、その他のコストを余計に発生させるとは一概には言えないということ。
# 勿論、短い(深く再帰する)再帰関数が無駄にスタックを消費することは言うまでもないが。
0962デフォルトの名無しさん
2007/11/09(金) 10:47:33array[x + w * h]じゃなくてarray[x + w * y]だね。
0963デフォルトの名無しさん
2007/11/09(金) 11:47:27釣られてやるか。
少なくともBNFではシンタクスしか理解できんわな。
セマンティクスはBNFでは表現できないし、理解できない。
ソースを読めるかどうかは、前提となる技術や理論や知識を読み手が持っているか
どうかにかかっているが、ソースがモデル化している概念や仕様に関する
知識が零である場合、ソースを読んでそれを再構成しようとするのは非常に
難しくなる。それが複雑であればあるほどに。
>>155-156は口だけ厨房だな。
0964デフォルトの名無しさん
2007/11/09(金) 12:32:32まだその話してんのか・・・w
まさにシンタックスについて話したかったからBNFモドキで
書いたってことすら分かってないだろ、お前・・・。
0965デフォルトの名無しさん
2007/11/09(金) 12:34:360966デフォルトの名無しさん
2007/11/09(金) 12:42:250967いかん、スレが違うのか
2007/11/09(金) 12:46:430968デフォルトの名無しさん
2007/11/09(金) 15:38:22釣られてやるか。
少なくともBNFではシンタクスしか理解できんわな。
セマンティクスはBNFでは表現できないし、理解できない。
ソースを読めるかどうかは、前提となる技術や理論や知識を読み手が持っているか
どうかにかかっているが、ソースがモデル化している概念や仕様に関する
知識が零である場合、ソースを読んでそれを再構成しようとするのは非常に
難しくなる。それが複雑であればあるほどに。
>>155-156は口だけ厨房だな。
0969デフォルトの名無しさん
2007/11/09(金) 15:50:49a=1の場合、a && (foo(), 1)が真になるからここで処理を終了するという風になっているのでしょうか?
0970デフォルトの名無しさん
2007/11/09(金) 15:54:45書くな、そんな糞コード。
0971デフォルトの名無しさん
2007/11/09(金) 16:59:190972デフォルトの名無しさん
2007/11/09(金) 17:02:19そんなのがあるのですね・・・
入門書にかかれていないのって結構多いですね。
0973デフォルトの名無しさん
2007/11/09(金) 18:02:340974デフォルトの名無しさん
2007/11/09(金) 18:07:56`python-lib_text.に`SyntaxError.が…(+ФyФ)!ですが動作する物ですね…
0975153
2007/11/09(金) 18:36:18DOSでプリントアウトできて、
ブラウザにドロップしてもインデントが乱れなくて、
E-Mailでのreplyにも耐える
ようにすると8タブで72文字になってしまうw
0976153ではありません
2007/11/09(金) 18:37:580977デフォルトの名無しさん
2007/11/10(土) 00:14:41サブルーチンが20行以内とか、まともにコーディングしたことないやつのたわごとだろ。
0978デフォルトの名無しさん
2007/11/10(土) 00:15:370979デフォルトの名無しさん
2007/11/10(土) 00:28:360980デフォルトの名無しさん
2007/11/10(土) 00:33:37画面が20〜25行が主流だったころから、100行表示できる環境もある今日まで、ずっと言われ続けている。
0981デフォルトの名無しさん
2007/11/10(土) 00:44:15そんなこと言い出すやつがいるところはカンマ演算子でも使いまくって横に書いてやればいいんだ
横も縦もルール範囲内ですよ?って
0982デフォルトの名無しさん
2007/11/10(土) 01:12:561関数20行以内程度なら、例外が出ないということは無いが、全く出来ないというわけでもない
とは言え、時代に合わせて、40行位までは認めてよとは言うだろうけどな
20行以内なんてのは、どうせDOSのエディタで1画面分だろうしな
0983デフォルトの名無しさん
2007/11/10(土) 01:18:43100行くらいなら、まあ、許容できるかなって感じ。
0984デフォルトの名無しさん
2007/11/10(土) 01:22:14インデントを使わず、;で改行せずにやれば結構40行でも行けるかもな……
絶対やりたくないけど
0985デフォルトの名無しさん
2007/11/10(土) 01:27:360986デフォルトの名無しさん
2007/11/10(土) 01:29:37言語はSmalltalkだが。
0987デフォルトの名無しさん
2007/11/10(土) 01:37:48行数が少ないほど、一行あたりのバグの件数が多かったとか。
100行のサブルーチンひとつより、10行のサブルーチン10個のほうがバグが多いらしい。
0988デフォルトの名無しさん
2007/11/10(土) 01:39:560989デフォルトの名無しさん
2007/11/10(土) 02:13:520990デフォルトの名無しさん
2007/11/10(土) 02:27:25なんか違和感を感じたので、よーく考えてみた
10行のコードの中の1行にパグがある場合、1/10のバグになる
100行のコードの中の1行にバグがある場合、1/100のバグになる
なんとなく、違和感の原因が判った気がする...
0991デフォルトの名無しさん
2007/11/10(土) 02:32:32そういう計算だったら「200行以下のサブルーチン」なんて但し書きはなくて、単純に、
「行数が大きければ大きいほどバグが少ない」って言えばいいことになる。
0992デフォルトの名無しさん
2007/11/10(土) 02:43:27200行を超えると、今度は複雑度が増えてバグも増えるってことだろ。
0993デフォルトの名無しさん
2007/11/10(土) 02:50:27そういう話じゃなくて?
0994デフォルトの名無しさん
2007/11/10(土) 02:54:52感覚的にユニットテストしやすい大きさってのが分かってくるから。
0995デフォルトの名無しさん
2007/11/10(土) 02:55:02そうじゃないだろ
200行以下のサブルーチンの場合、行数が少ないほど、バグの量が多く見えるって事じゃないの?
0996デフォルトの名無しさん
2007/11/10(土) 02:57:56関数あたりじゃなくて、行数あたりだから関係ないんじゃないの?
0997デフォルトの名無しさん
2007/11/10(土) 02:59:220998デフォルトの名無しさん
2007/11/10(土) 03:01:090999デフォルトの名無しさん
2007/11/10(土) 03:01:131000デフォルトの名無しさん
2007/11/10(土) 03:01:4610011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。