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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
禁止ネタ(超既出)
・長い関数
・深いネスト
・グローバル変数
・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/
2デフォルトの名無しさん:2007/10/30(火) 03:02:05
>>1
3デフォルトの名無しさん:2007/10/30(火) 03:03:47
さーて俺のための新しいスレが建った!!
4デフォルトの名無しさん:2007/10/30(火) 03:03:59
糞尿スレ!
5デフォルトの名無しさん:2007/10/30(火) 03:04:44
>>3
何?新ネタ?
それとも前スレの続き?
6デフォルトの名無しさん:2007/10/30(火) 03:04:46
次は何ネタが良い?
7デフォルトの名無しさん:2007/10/30(火) 03:05:36
あ、続きでも良いよ。
でも真ネタ考えるんなら時間かかるから待って
8デフォルトの名無しさん:2007/10/30(火) 03:05:50
>>976
>「代用する」って書かれてる?あるならどこ?
>あと「代用」の意味をお願い
これレスもらってないんだけど
9デフォルトの名無しさん:2007/10/30(火) 03:07:55
>>8
ISOに
> true (nozero)
の一文が有ったらしい。
10デフォルトの名無しさん:2007/10/30(火) 03:07:59
前スレ>>976
まだ見てたら>>8にレス頂戴
11デフォルトの名無しさん:2007/10/30(火) 03:08:13
とりあえず論争始めたら名前にレス番書いて欲しい。
前スレ、どっちが909でどっちが910か分かり辛い。

…もっともどっちも阿呆だから判別の必要すらないかも試練が。
12デフォルトの名無しさん: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
13デフォルトの名無しさん:2007/10/30(火) 03:08:37
ぼくは、小学校の算数で、0より大きい数は正数で、0より小さい数は負数と習ったんだ
でも前スレで、0と、0より大きい数と、0より小さい数を返す関数の話を見てたら
0より大きな数であって正数ではない、0より小さな数であって負数ではない
でも、その数字に意味はないと、変なことを言う人が居るんです
もう一人の人が、それは符号だろと突っ込みを入れてるのに、いや違うと言い張るんです

こんぴゅーたーの世界って凄い世界ですね
14デフォルトの名無しさん:2007/10/30(火) 03:12:04
>>9
君誰?
15デフォルトの名無しさん:2007/10/30(火) 03:12:42
>>13
そのネタつっこみやすいから良いよ!!

数学の世界で0より大きい数と言えば正の数だが、コンピュータの世界では、
0より大きい数といえば、単に0より大きい数でしかない。
逆に、正の数といえば、正の数でもいいし、0より大きい数でも良い。

なぜかというと、0 がマジックナンバーだから。
正の数といわずに、あえて、0より大きい数といってるのだから、
0 に何か意味があるのだろうと考えるのがコンピュータ屋さん。
16デフォルトの名無しさん:2007/10/30(火) 03:12:57
>>12
前スレを見なかったフリして書き込むけど、

>  if(変数 = NULL)
>
>  が引き起こすバグをどうやって見つけるのか考えた事がある?ない?
>  難しい正規表現でも作る?`NULL'以外の場合もあるよ。

lint でみつけらんねーか?
てか、最近ならコンパイラにもプリプリされそうだけど。
17デフォルトの名無しさん:2007/10/30(火) 03:14:53
前スレ>>979
> C++の場合は、
> http://www.fujigoko.tv/rev/prof/
> の、文書的プログラミングとは?
> の桃太郎の部分を参考に。
>
> ・オブジェクトの状態を変える(セットする)
> ・何らかの処理を行って結果を返す
>
> この2つは分けるのがC++の基本です。
>
> で、オブジェクトの状態を変えるときにはいっぺんに複数の
> パラメータを変化させるのではなくて、
> 変化するパラメータと、それには影響しないパラメータを分離します。
> というやり方で引数だらだらを避けます。

C++で引数減らせるなら当然Cでも減らせます。
いまどきはCベースのライブラリでもたいていオブジェクト指向的な設計になってます。
むしろ、propetyとmethodの単純な二元論で設計しようとする場合の弊害を気にすべきです。
話がそれましたが、つまりいいことはオブジェクト指向のご説明は不要ということです。
18デフォルトの名無しさん:2007/10/30(火) 03:15:37
>>16
誤代入を防ぐために定数を左に書くってのはセンス無いよね。

if( !p ){ /* ヌルポ */ }
if( NULL==p ){ /* ヌルポ */ }
if( p==NULL ){ /* ポヌル */ }

ポヌルより、ヌルポだろ、ぐらいは言って欲しい。
19デフォルトの名無しさん:2007/10/30(火) 03:18:56
やっぱり代用の意味の説明はしてくれないのかな
20デフォルトの名無しさん:2007/10/30(火) 03:19:45
>>前スレ944
> 「C言語で符号を調べるには、0 と比較するしかない」
企画書のどこに、「C言語で符号を調べるには、0 と比較すればいい」って書いてあるのですか?
符号を調べる方法が0と比較する方法以外にあるかないかは全く関係無しで、「0と比較すれば調べられる」ってのがどこに書いてあるのか知りたいのです。
これなら書いてある箇所を示せば済む話だから、悪魔の証明とか難しい話じゃないですよね。

あと、
>> つまり、Cは整数で真偽を代用する。
>これがどこに明記されているか、さっさと出典を示せよ。
これに対するお前の回答を早いとこ頼むよ。
前スレ892のは証拠になってないからね。
21デフォルトの名無しさん:2007/10/30(火) 03:20:12
あらすじ

81 名前:デフォルトの名無しさん[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がエディタの外に出てしまって、見えないことがあることも付け加えておく。
22デフォルトの名無しさん:2007/10/30(火) 03:21:33
あらすじ

187 名前:デフォルトの名無しさん[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)) {}
 と書くのが一番分かりやすいから。


こうして不毛な論争がはじまった。
23デフォルトの名無しさん:2007/10/30(火) 03:24:42
>>20
前者に関しては
6.5.8 Relational operators に書いてある。

後者に関しては
前スレ>>892 で納得できないなら、Cは整数で真偽を代用するわけではない、で良いよ。
24デフォルトの名無しさん:2007/10/30(火) 03:25:13
不毛な議論っていうか、前スレ>>80がファビョッって暴れているだけだろ。
不毛どころか議論にすらなってない。
25デフォルトの名無しさん:2007/10/30(火) 03:25:59
>>23
引用よろ。
26デフォルトの名無しさん:2007/10/30(火) 03:26:03
>>21-22
感動した。
27デフォルトの名無しさん:2007/10/30(火) 03:26:04
>>15
規格に0と、0より大きい数と、0より小さい数と書かれているのに、将来的に1になったり10になったりすることが有り得るのでしょうか?
また、将来的に変更が有り得た場合、過去との互換性はどうなるのでしょうか?

規格として0を基準にした関数と設計されているのであれば、将来的にも0が基準であると思われるのですが
(現存する過去のプログラムを全て変更することは難しいし、変更前のコンパイラと、変更後のコンパイラが存在する場合に、問題は最悪の方向に向かって進むと思われますが)
28デフォルトの名無しさん:2007/10/30(火) 03:26:18
>20

>前スレ909
>だからC言語で符号を調べる場合は 0 と比較することになってる。

ISO9899に書いてない方法もあり得るのだから、
「C言語で〜することになってる。」はダウト。
この一言で済むのに

>前スレ910
>それはISO9899:1999の§いくつに書いてありますか?

阿呆か。
29デフォルトの名無しさん:2007/10/30(火) 03:27:15
>>25
Each 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.
30デフォルトの名無しさん:2007/10/30(火) 03:27:17
>>18
そういう感覚はキライじゃないw

でも、if の後には WS がほしい+丸括弧の中の WS はない方が好き。
個人的な感覚。押し付ける気全くなし。
31デフォルトの名無しさん:2007/10/30(火) 03:30:03
結局、前スレの >>80 の恥ずかしい発言

>  if(変数 = NULL)
>  が引き起こすバグをどうやって見つけるのか考えた事がある?ない?

(彼はコンパイラが警告を出してくれる事を知らなかった!)

これが総攻撃の的にされたため、敵から的をそらすために
!strcmp がどうのこうの、性の数がどうの負の数がどうの、符号がどうのと
話をややこしくして陽動作戦に転じたワケだ。
32デフォルトの名無しさん:2007/10/30(火) 03:33:34
>>27
変更されるかどうかは問題ではない。
作った人が、「0より大きい数」と言ってるのだから、「0より大きい数」かどうかを調べれば良いじゃないかと。
いちいち、「0より大きい数」というのを「正の数」と読み直す必要は無いだろ。
むしろどうしてわざわざ、「0より大きい数」を「正の数」と読み直す必要がある?
もし無いなら、「0より大きい数」でいいだろ。
33デフォルトの名無しさん:2007/10/30(火) 03:34:31
>>23
君の「代用」という言葉の使い方はどんなの?
34デフォルトの名無しさん:2007/10/30(火) 03:39:46
あ、ちょっとまって、>>29をよく読んだから、
true のとき 1 を返して、false のとき 0 を返し、
その型はintだ、と書いてあるな。

ということは、Cは論理型を整数型で代用しているってことだな。
35デフォルトの名無しさん:2007/10/30(火) 03:41:02
>>32
私の持っているC言語の本には、strcmpは正と負と0を返すと書いているし
VisualStudio6.0のMSDNにも、正と負と0を返すとあるのだが
そして、そこには、数とは書いては居ない
最新のMSDNでは、< 0、0、> 0となっていて、0より大きい、0、0より小さいと書かれてはいても数とは書いてはいないのだが

36デフォルトの名無しさん:2007/10/30(火) 03:42:24
>>33
英語読めるんなら、>>29 読んでみ。
true のとき 1 を返して、false のとき 0 を返し、
その型はintだ、と書いてあるから。
37デフォルトの名無しさん:2007/10/30(火) 03:44:13
>>36
うん
それで「代用」の意味は?
38デフォルトの名無しさん:2007/10/30(火) 03:46:01
>>35
それは本がタコなんでしょう。

ISO/IEC 9899:TC2 には

> 7.21.4.2
> The strcmp function returns an integer greater than, equal to, or less than zero

と書いてありましたよ。
39デフォルトの名無しさん:2007/10/30(火) 03:47:05
>>37
true のとき 1 を返して、false のとき 0 を返してるのが代用。
それぞれの型が int であることも明記してある。
40デフォルトの名無しさん:2007/10/30(火) 03:49:52
>>39
そうじゃなくて
「代用」の意味が聞きたいんだけど
41デフォルトの名無しさん:2007/10/30(火) 03:51:50
代用
->その物の代わりに用いること
42デフォルトの名無しさん:2007/10/30(火) 03:52:25
実際、true の変わりに 1 を、 false の 代わりに 0 を返しているわけだからな。
43デフォルトの名無しさん:2007/10/30(火) 03:57:43
>>38
数字の0ではなく、zeroと書かれているから、それは、正数や負数の基準点としてのゼロじゃないの?
もし、マジックナンバーとしての0であれば、>>29の様に数字で0と表記するはずだよ
44デフォルトの名無しさん:2007/10/30(火) 03:59:11
>>43
Integer と書いてあるが。
45デフォルトの名無しさん:2007/10/30(火) 04:00:39
strcmpの戻り値はintだが、
intは『特に指定の無い限り』符号付であるから
0、正、負ではなく>38なのだろうと。

#でもintが符号無しの場合でも正しく判定できるもんなのか…?
4644:2007/10/30(火) 04:01:13
>>43
ごめん。まちがった。
47デフォルトの名無しさん:2007/10/30(火) 04:01:38
「正数」「負数」は整数ではなく実数です、とか言ってみるテスト。
48デフォルトの名無しさん:2007/10/30(火) 04:04:36
>>43
さあ、その可能性もあるかもな。
だけど、正数としたいなら正数と、負数としたいなら負数と直接書けばいいわけで、
zero よりも 大きいか 等しいか 未満な 整数が返ります、
なんてわざわざ書くかなという気もする。

でもどっちにしろ、!strcmp と書くことのいいわけにはならないんだけどね。
49デフォルトの名無しさん:2007/10/30(火) 04:05:34
>>45
符号なしで、0より小さい判定をどうするのかは非常に知りたい
恐らく、それが、0より大きい、0より小さいつう微妙な表現の元なんだろう
50デフォルトの名無しさん:2007/10/30(火) 04:13:14
これに対するレスも見てみたい

>ISO9899を見ているとnegativeとかnonnegativeという語が
>ひっきりなしに出てくるんですがこれは何を意味するとお考えでしょうか。

>signed と unsigned の違いは何ですか?
51デフォルトの名無しさん:2007/10/30(火) 04:17:23
#include <stdio.h>
#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
52デフォルトの名無しさん:2007/10/30(火) 04:19:12
movl %eax, -28(%ebp)
movl -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
53デフォルトの名無しさん:2007/10/30(火) 04:25:20
nonzeroはtrue、trueはnonzero。
zeroはfalse、falseはzero。

これは合ってる?
54デフォルトの名無しさん:2007/10/30(火) 04:27:40
>>50
3ページ目に 「 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.

ここでもあえて、正とか負とかいう言葉は避けてる感じだね。
55デフォルトの名無しさん:2007/10/30(火) 04:29:13
>>51-52
アセンブラとか出してくる時点でもう終わってる。処理系依存じゃん。
56デフォルトの名無しさん:2007/10/30(火) 04:33:32
>>53
ture (nonzero) と書いてあるから、
少なくとも (意味の上でのtrue) は (実装でのnonzero) なのは確か。
だけど、(実装でのnonzero) が (意味の上でのtrue) であるかはわからないんじゃない?
57デフォルトの名無しさん:2007/10/30(火) 04:35:09
おまいら寝ずに議論かよww
58デフォルトの名無しさん:2007/10/30(火) 04:37:34
>>51のソースをVisual C++ Toolkitでコンパイルすると、結果は-1,1,1,-1ですね
Borland C++5.5.1とTurbo C++3.1 for Windowsでコンパイルすると、結果は-14, 14, 2, -2になったけどね
59デフォルトの名無しさん:2007/10/30(火) 04:39:51
>>56
nonzero(true)もあるよ
60デフォルトの名無しさん:2007/10/30(火) 04:40:48
>>58
gcc
61デフォルトの名無しさん:2007/10/30(火) 04:43:34
>>59

> 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 の意ですよってだけだな。
62デフォルトの名無しさん:2007/10/30(火) 04:43:39
じゃあ>>53は合ってる?
63デフォルトの名無しさん:2007/10/30(火) 04:44:31
>>62
間違ってるんじゃね
64デフォルトの名無しさん:2007/10/30(火) 04:44:51
なんで?
65デフォルトの名無しさん:2007/10/30(火) 04:45:21
すみません
Cで
switch(strcmp(s1, s2)){
case 0:
hage;
case <0:
fuga;
case >0:
hoge;
}
みたいな書き方ってどうすればいいのですか?
66デフォルトの名無しさん:2007/10/30(火) 04:46:29
>>65
できません
67デフォルトの名無しさん:2007/10/30(火) 04:47:09
>>65
出来ない

>>64
逆裏対偶勉強すれば?
68デフォルトの名無しさん:2007/10/30(火) 04:47:39
>少なくとも (意味の上でのtrue) は (実装でのnonzero) なのは確か。
じゃあこれが成り立つためには
>ture (nonzero) と書いてあるから、
理由がこれだけじゃ足りないでしょ
69デフォルトの名無しさん:2007/10/30(火) 04:49:01
>>65
if(strcmp(s1, s2) > 0){
hage;
} else if (strcmp(s1, s2) < 0){
fuga;
} else {
hoge;
}
70デフォルトの名無しさん:2007/10/30(火) 04:50:19
>>68
たりないから >>34 をあげる。
71デフォルトの名無しさん:2007/10/30(火) 04:50:35
>>65
Ruby なら出来るよ
72デフォルトの名無しさん:2007/10/30(火) 04:51:57
>>69
それだと strcmp(s1, s2)>0 のときに hage; しか実行されないぞ
73デフォルトの名無しさん:2007/10/30(火) 04:53:28
>>69
2回呼んでるよ
74デフォルトの名無しさん:2007/10/30(火) 04:55:40
>>69
s1==s2 となる確立が低いから、条件分岐端折って最後に持ってきているのは良いが、
正直、strcmp呼び出しの重さに比べたら、分岐なんてなんでもない。

int ret = strcmp(s1, s2);
if(ret > 0){
hage;
} else if (ret < 0){
fuga;
} else {
hoge;
}

どうせならこう書けば良いのに。
75デフォルトの名無しさん:2007/10/30(火) 04:56:05
>>65

if(strcmp(s1, s2) == 0){ hage; fuga; hoge; }
if(strcmp(s1, s2) < 0){ fuga; hoge; }
if(strcmp(s1, s2) > 0){ hoge; }
76デフォルトの名無しさん:2007/10/30(火) 04:57:28
>>70
いらない
77デフォルトの名無しさん:2007/10/30(火) 04:58:33
おまえらばかだな
78デフォルトの名無しさん:2007/10/30(火) 04:59:32
>>77
新しいネタを提供してください
79デフォルトの名無しさん:2007/10/30(火) 05:00:58
Javaで
str.equals("hoge")
ってなんなの?
すげー下手っぽく見える
80デフォルトの名無しさん:2007/10/30(火) 05:01:17
p && (p->hoge(), 0);
という書き方について、おまいらどう思う?
81デフォルトの名無しさん:2007/10/30(火) 05:01:49
>>79
そのネタはもうやった
82デフォルトの名無しさん:2007/10/30(火) 05:02:13
Java の String は = で代入できてしまうから
それへの安全対策だろ
83デフォルトの名無しさん:2007/10/30(火) 05:04:12
>>70
>true のとき 1 を返して、false のとき 0 を返し、
>その型はintだ
この1や0はマジックナンバーだよ
84デフォルトの名無しさん:2007/10/30(火) 05:06:08
if(c & 0x0080 == 0x0080){
85デフォルトの名無しさん:2007/10/30(火) 05:14:26
>>83
マジックナンバーだったら何か問題があるの?
86デフォルトの名無しさん:2007/10/30(火) 05:21:24
うん
87デフォルトの名無しさん:2007/10/30(火) 05:22:19
>>86
どう問題があるか、論理的かつ完結に記述して
88デフォルトの名無しさん:2007/10/30(火) 05:32:22
いいえ
89デフォルトの名無しさん:2007/10/30(火) 08:12:53
左右定数の話題が終わったら屁理屈合戦ときたもんだ
90デフォルトの名無しさん:2007/10/30(火) 08:21:45
>>84
それもやった
91デフォルトの名無しさん:2007/10/30(火) 08:59:19
default節のないswitch文。
92デフォルトの名無しさん:2007/10/30(火) 10:18:36
defaultがないと駄目なのは何故?
93デフォルトの名無しさん:2007/10/30(火) 10:38:35
自分で考えろよ
94デフォルトの名無しさん:2007/10/30(火) 10:56:03
どうせまともな理由なんてないだろうと挑発したんですよー
95デフォルトの名無しさん:2007/10/30(火) 11:09:57
またこいつか
96デフォルトの名無しさん:2007/10/30(火) 11:26:33
>>94
まともな理由なんてないから、defaultを付けなくてもいいよ
97デフォルトの名無しさん:2007/10/30(火) 11:26:58
必要ないなら無いでもおっけだろ。
ただし、値の範囲チェックは事前にしっかりやっとけ。
98デフォルトの名無しさん:2007/10/30(火) 11:59:45
値の範囲チェックなんかするくらいだったら、defualt書くだろ。アホか。
99デフォルトの名無しさん:2007/10/30(火) 12:08:38
>>98
アホの子はおまえだ 自分の書いた綴りをよくよく見てみろ
100デフォルトの名無しさん:2007/10/30(火) 12:13:46
同僚が
「無限ループではかならずwhile(1)を使え!
 それ以外のループでは必ずforを使え!」
ってなことを言っていたのですがどうでしょう。
皆さんはそもそも無限ループを使いますか?
101デフォルトの名無しさん:2007/10/30(火) 12:16:15
>>100
どっちでもいい
最適化によってどちらも似たような、あるいは全く同じコードになる。

while (1) の方が読みやすいかも。
102デフォルトの名無しさん:2007/10/30(火) 12:21:02
>>101
わたしもfor(;;)だと落ち着かないので、while(1)を使ってます。
103デフォルトの名無しさん:2007/10/30(火) 12:25:17
釣り堀
104デフォルトの名無しさん:2007/10/30(火) 12:27:02
>>53
合ってる。
105デフォルトの名無しさん:2007/10/30(火) 12:32:10
0や1はマジックナンバーじゃないだろ。
8とか80とか256とは違う。

2や3だって、場合によってはマジックナンバーとは言えない。
106デフォルトの名無しさん:2007/10/30(火) 12:32:29
どっちかというとwhile(1)のほうがアフォなコード吐くコンパイラが多そうだが・・・
あと、警告: 論理が常に真だろヴォゲ が出たらイヤだな
107デフォルトの名無しさん:2007/10/30(火) 12:47:01
>>106
そういう場合は
こんなコンパイラは嫌だ!7行目
http://pc11.2ch.net/test/read.cgi/tech/1193443676/
108デフォルトの名無しさん:2007/10/30(火) 12:53:51
今夜のネタ募集
109デフォルトの名無しさん:2007/10/30(火) 12:57:51
ネタ募集は特にしなくても、負数や正数を認めないあのアホが
来てくれれば勝手にファビョってくれると思うよ
110デフォルトの名無しさん:2007/10/30(火) 12:58:11
痛い子は一人と見た
111デフォルトの名無しさん:2007/10/30(火) 13:02:16
だいたい一晩中寝ずにレスしてるなんて明らかにニートじゃん。
性格歪んでるねあの馬鹿は。

おっと1時になった午後の仕事だ。
112デフォルトの名無しさん:2007/10/30(火) 13:04:09
>>111
匂うぞ、お前
113デフォルトの名無しさん:2007/10/30(火) 13:25:22
>>1からここままで読みとばしたんだけど、新しいネタは出てるの?
114デフォルトの名無しさん:2007/10/30(火) 13:33:29
読んでないから分かりません
115デフォルトの名無しさん:2007/10/30(火) 15:38:16
>ひどいものになると、この記事が論破しようとしている迷信をこの世に残すのに貢献している。

あなた方は迷信にまみれていませんか?
116デフォルトの名無しさん:2007/10/30(火) 15:48:33
>>104
合ってないよ。
意味の上でtrueと言った場合は、必ずnonzeroだが、
nonzeroのときは、意味の上で必ずしもtrueを表しているとは言えない。
逆裏対偶を勉強しなおせ。
117デフォルトの名無しさん:2007/10/30(火) 15:49:09
>>110
オレだけかYO!w
118デフォルトの名無しさん:2007/10/30(火) 16:19:13
>>116
> nonzeroのときは、意味の上で必ずしもtrueを表しているとは言えない。
例えば?
119デフォルトの名無しさん:2007/10/30(火) 16:24:12
>>118
整数型を整数の意味で使っている場合。
120デフォルトの名無しさん:2007/10/30(火) 16:25:31
バカジャネーノ?
121デフォルトの名無しさん:2007/10/30(火) 16:25:47
>>116
「真はzeroではない」のに

「zero」でなければ「真」ではない
とでも言うのですか?
122デフォルトの名無しさん:2007/10/30(火) 16:29:42
>>121
リンゴは果物ですが、
果物はリンゴではないです。

int i; と書いたとき、
iはintですが、intはiではありません。

あなたはバカですが、バカは全てあなたというわけではありません。
私は人間ですが、人間は全て私というわけではありません。
123デフォルトの名無しさん:2007/10/30(火) 16:30:59
こいつ馬鹿だ
124デフォルトの名無しさん:2007/10/30(火) 16:37:38
馬鹿というより屁理屈上手なだけだろ
数学の論理学を完全に無視してやがる
125デフォルトの名無しさん:2007/10/30(火) 16:46:04
>>124
数学の論理学をどう無視しているか、的確に指摘してみて
126デフォルトの名無しさん:2007/10/30(火) 16:47:59
屁理屈が上手いかどうかは別として、構ってもらうのは上手そうだな
127デフォルトの名無しさん:2007/10/30(火) 16:50:40
というか、
「AならばB」
だからといって
「BならばA」
だとは限らない
ってのは、数学の基礎だろ。
逆裏対偶って、たしか高校数学で習うんだったっけか?
128デフォルトの名無しさん:2007/10/30(火) 16:53:39
かまってチャン炸裂。
その幼児性に吐き気。
129デフォルトの名無しさん:2007/10/30(火) 16:55:50
高卒ニートか。
130デフォルトの名無しさん:2007/10/30(火) 16:56:16
数学に反したこと言って構ってもらおうとしているのはそっちだろ。
そういうのを世の中では「トンでも」と言う。
131デフォルトの名無しさん:2007/10/30(火) 16:56:54
>>127
お前、いろんなスレでどうでもいいレス量産してるだろ。

自重しろ。
132デフォルトの名無しさん:2007/10/30(火) 16:59:08
おれはム板ではここにしか書き込まないぞ。
他のスレに書き込むと迷惑だろうからな。
それよりも、俺の書き込みをわざわざ他スレにコピペしたやつこそ自重すべき。
133デフォルトの名無しさん:2007/10/30(火) 17:01:11
>>127
お前、本当にそんなことここで話したいのかよ
134デフォルトの名無しさん:2007/10/30(火) 17:03:01
>>133
話すというより、知っておかなきゃ議論にならないだろ。
135デフォルトの名無しさん:2007/10/30(火) 17:04:02
ここはいい釣堀
136デフォルトの名無しさん:2007/10/30(火) 17:06:05
>>127
条件が全く違います
「真はzero以外」なのですから、「真であるためには、zero以外でなければならない」
つまり、「zeroであれば真では無い」と言えます
同様に、「真であればzeroでは無い」と言えます
よって、「zeroでなければ真である」と言えます
137デフォルトの名無しさん:2007/10/30(火) 17:07:29
true が nonzero だからということを根拠として、
nonzero が true だということを言ってしまうのは、数学の基礎ができてない証拠だろ。
nonzero は true の意味で使われることもあるが、そうでない場合もある。
138デフォルトの名無しさん:2007/10/30(火) 17:08:09
>>134
その「議論」とやらは、何を目指してるんだ?
139デフォルトの名無しさん:2007/10/30(火) 17:14:19
>>137
int i = 0;
if (i){
i = 0;
} else {
i = 1;
}
上のコードで、iはどうなるの?
140デフォルトの名無しさん:2007/10/30(火) 17:17:34
>>137
取り敢えず、それは、nonzeroがtrueで無いことを証明しなければ納得してもらえないだろう
141デフォルトの名無しさん:2007/10/30(火) 17:20:17
>>136
お願いだから、数学やり直して。

>「真はzero以外」なのですから、
↑これを命題だと考える
>「真であるためには、zero以外でなければならない」
↑真であることは、zero以外の十分条件である、ということを言葉に直したもの。
↑つまり、命題を言いなおしたに過ぎない。
>つまり、「zeroであれば真では無い」と言えます
↑これは命題の対偶。命題が成り立つのなら、その対偶も成り立つので、これはOK。
>同様に、「真であればzeroでは無い」と言えます
↑真であることは、zero以外の十分条件である、ということを言葉に直したもの。
↑またまた命題を違う言葉で言いなおしたに過ぎない。
>よって、「zeroでなければ真である」と言えます
↑これは命題の逆。命題が正しいからといって、常にその逆が成り立つとは限らない。
142デフォルトの名無しさん:2007/10/30(火) 17:24:10
>>139
まず int 型の i が 0 で初期化される。
つぎに、i が 0 以外なら i に 1 が代入され、
そうでないなら、i に 0 が代入される。

>>140
整数型を整数の意味で使った場合、nonzero は true ではないかもしれない。
143デフォルトの名無しさん:2007/10/30(火) 17:27:22
>まず int 型の i が 0 で初期化される。
>つぎに、i が 0 以外なら i に 1 が代入され、
>そうでないなら、i に 0 が代入される。

ごめん間違った ↓ に訂正

まず int 型の i が 0 で初期化される。
つぎに、i が 0 以外なら i に 0 が代入され、
そうでないなら、i に 1 が代入される。
144KY:2007/10/30(火) 17:27:50
Cの話だろーが
145デフォルトの名無しさん:2007/10/30(火) 17:28:16
命題「AならばB」に対し、

対偶:「BでないならAでない」
逆:「BならばA」
裏:「AでないならBでない」
対偶の場合とは異なり、元の命題「AならばB」が正しくとも
逆や裏は必ずしも正しいとは限らない(逆は必ずしも真ならず)。
しかし、逆命題「BならばA」の対偶は「AならばB」の裏「AでないならBでない」
と一致するので、 逆「BならばA」と裏「AでないならBでない」の真偽は必ず一致する。

from wikipedia
146デフォルトの名無しさん:2007/10/30(火) 17:32:04
>>142
> 整数型を整数の意味で使った場合、nonzero は true ではないかもしれない。

整数型の意味とやらに左右されず、真偽値として定まるのが「nonzeroはtrue」なのでは?
147デフォルトの名無しさん:2007/10/30(火) 17:34:34
>>142
char str[256] = "";
if (str) {
strcpy(str, "Hello!");
} else {
printf("error!\n");
}

ではこれは?
148デフォルトの名無しさん:2007/10/30(火) 17:37:58
>>144
つまりは、「zeroでなければ真である」
ということを言うためには、
「真でないならzeroである」
ということを言わなきゃいけないんだよね。
真でない場合を考えると、整数の 1 や 2 は、真ではないけど 0 でもない。
なので、「真でないならzeroである」 は 成り立たないし、
どうように、「zeroでなければ真である」 も成り立たない。
149デフォルトの名無しさん:2007/10/30(火) 17:40:15
>>148
int i = 10;
if (i){
i = 0;
} else {
i = 1;
}
上のコードで、iはどうなるの?
150デフォルトの名無しさん:2007/10/30(火) 17:40:54
>真でない場合を考えると、整数の 1 や 2 は、真ではないけど 0 でもない。
ここんとこkwsk
151デフォルトの名無しさん:2007/10/30(火) 17:43:16
>146
>整数型の意味とやらに左右されず、真偽値として定まるのが「nonzeroはtrue」なのでは?
その 「 nonzero は true 」 が誤りなのでは?
例えば、if 文は式を取って、その式の結果が、0以外 か 0 かで分岐する。
わざわざ式の真偽を考える必要はないし、nonzero を true と捉える必要も無い。
152デフォルトの名無しさん:2007/10/30(火) 17:46:09
> わざわざ式の真偽を考える必要はないし、nonzero を true と捉える必要も無い。

!は真偽値を扱いたいという素直な表れでは?
153デフォルトの名無しさん:2007/10/30(火) 17:46:37
>>147
まず、256 の大きさの char 型の配列 str を "" で初期化する。
つぎに、str が 0以外 なら、str に "Hello!" をコピーし、
そうでないなら、標準出力に "error!\n" を出力する。
154デフォルトの名無しさん:2007/10/30(火) 17:50:16
>>153
strは0にならねぇよ
155デフォルトの名無しさん:2007/10/30(火) 17:50:40
>>
まず int 型の i が 0 で初期化される。
つぎに、i が 0 以外なら i に 0 が代入され、
そうでないなら、i に 1 が代入される。

>>150
C言語において、整数の 1 や 2 の真偽を問う必要性が無い。
例えば、if文は、0と比べてどうか、という価値観で分岐しているだけであって、
真偽で分岐しているわけではない。
156デフォルトの名無しさん:2007/10/30(火) 17:54:48
また昨晩のアホのニートが来てるのか
157デフォルトの名無しさん:2007/10/30(火) 17:55:56
>>152
もとの式が論理値を意味しているのなら、「!」を使えばよい。
もとの式が論理値を意味していないのなら、わざわざ「!」を使う必要も無い。
その意味で「わざわざ式の真偽を考える必要はないし、nonzero を true と捉える必要も無い。」
と書いた。
158デフォルトの名無しさん:2007/10/30(火) 17:56:48
>>155 論理式の結果は、もはや数値という意味を失って、
論理値として期待される。整数として扱う必要性が無い。

例:
int b = (1 != 0);
159デフォルトの名無しさん:2007/10/30(火) 17:57:02
こりゃつまらんな
160デフォルトの名無しさん:2007/10/30(火) 17:57:03
>>154
strは配列だから0になることはないね。
だけど、それはコードを書いた人に文句言ってよ。
161デフォルトの名無しさん:2007/10/30(火) 17:58:02
>>157 おk なんとなくキミの言いたいことは分かった。
162デフォルトの名無しさん:2007/10/30(火) 17:59:02
>>160 配列だから、ではなくて、
「文字列リテラルで初期化されているから」では?
163デフォルトの名無しさん:2007/10/30(火) 18:00:02
>>162 は忘れて…お願い><
164デフォルトの名無しさん:2007/10/30(火) 18:05:59
if (*str)なら大丈夫だw

ISO/IEC 9899:1999 6.5.3.3 の 5 に誰も触れないところがry
165デフォルトの名無しさん:2007/10/30(火) 18:06:33
なんかこっちって、スレタイトル本来の意味で気楽に書きにくいね。
辞めようと〜の方が書きやすい。辞めようとまでは思ってないけど。
166デフォルトの名無しさん:2007/10/30(火) 18:12:06
こいつのかまって度は、小学生並のしつこさだな。
167デフォルトの名無しさん:2007/10/30(火) 18:14:16
>>153>>155
なぜ、if文でエラーとなりコンパイルできないと答えずに、全ての設問の動作を回答したのでしょうか?
あなたの理屈で言うと、int i = 0;以外は、0以外であるが真では無いので、コンパイルされてはおかしいのでは無いでしょうか?
iは、int型であり、その値は10です
strは、str[0]のポインタであり、その値はstr[0]のアドレスです
どちらも、あなたの言う、0以外であるが真では無い物なのですが...
168デフォルトの名無しさん:2007/10/30(火) 18:15:58
>>166
ニートでしかも性格が悪いので相当他人に触れる事に飢えていると思われ
169デフォルトの名無しさん:2007/10/30(火) 18:21:11
>>164
真偽値を表している整数値は、真偽値のまま扱うべきだと言っているが。
>>149 のような書き方はC言語の仕様上、動くというだけで、やるべきではないし、
やるひつようもない。
C言語では、意味の上での真偽値は、必要とあらばいつでも整数値に格下できるというだけ。
170デフォルトの名無しさん:2007/10/30(火) 18:25:08
>>167
機能上、if文は、式が、0でないか、0と等しいか、を見るだけだから。
真偽を判定しているわけではない。
だから仕様上は動く。ただそれだけ。
171デフォルトの名無しさん:2007/10/30(火) 18:25:12
>>149のような書き方をするヤツっているのか?w
172デフォルトの名無しさん:2007/10/30(火) 18:26:20
>>171
このスレの人達はそうするらしいよ。
理由は「コンパイルが通るから」だってさ。
動きゃ味噌も糞もいっしょなんだよ。
173デフォルトの名無しさん:2007/10/30(火) 18:28:21
>>170
それは貴方の主張は間違っていると認めると言うことでしょうか?
それとも、全てのコンパイラはISOの規格を正しく実装していないと言うことでしょうか?
174デフォルトの名無しさん:2007/10/30(火) 18:31:05
>>173
単に動けばそれで良い、というなら、
「ヘタだなぁ」と思うコードも、
コンパイルはとおるのだろうし、一応は動くのだろうから、
このスレの趣旨と反します。
ここは、コンパイル出来る出来ないを議論する場所では有りません。
175KY:2007/10/30(火) 18:32:25
つ主観
176デフォルトの名無しさん:2007/10/30(火) 18:32:49
お前ら小学生かw 丁寧語で煽るなw
177デフォルトの名無しさん:2007/10/30(火) 18:33:41
もう皆IOCCC並みのプログラム書こうぜ
178デフォルトの名無しさん:2007/10/30(火) 18:37:34
>>174
現在、議題は、「真は0以外」で「0以外は真とは限らない」と言う主張は正しいのかどうかです
ですので、コンパイルエラーがでるでないでは無く
「真は0以外」で「0以外は真とは限らない」と言うのを証明して貰わなければならないのですが
少なくとも現時点の実装では、「0以外は真」として動作しているので、その見解を聞きたいのです
179デフォルトの名無しさん:2007/10/30(火) 18:40:05
なんか面白い方向に行ってるな。主張主はコテ付けるように!
180デフォルトの名無しさん:2007/10/30(火) 18:42:15
>>178
>「真は0以外」
>「0以外は真」
規格上これらの両方が成立すると思ってる?
前者のみが成立すると思ってる?
後者のみが成立すると思ってる?
どちらも成立しないと思ってる?
181デフォルトの名無しさん:2007/10/30(火) 18:44:08
>>178
>「0以外は真」として動作している
動作していません。
if 文は 0でないか 0と等しいか、で分岐しているだけです。
真偽を評価しているわけでは有りません。
if 文に意味を持たせるのは、プログラマの役目です。
そうでなければ、if 文は単に 0でないか 0と等しいか で機械的に分岐するだけです。
182デフォルトの名無しさん:2007/10/30(火) 18:44:23
>>180
私は>>136が正しいと思います
183デフォルトの名無しさん:2007/10/30(火) 18:45:42
今何人いるんだ?
184デフォルトの名無しさん:2007/10/30(火) 18:46:56
>>182
>>136 が 数学的に根拠が無いということは >>141 で示しました。
命題が正しいからといって、常にその逆が成り立つとは限りません。
185デフォルトの名無しさん:2007/10/30(火) 18:48:15
問題意識が…霞んでよく見えない。
ifでの分岐の作動原理に、真偽がどうの、を期待するのが気に食わないと?
intで代用する文化の延長で、ifの動作原理を抽象化して、
それを真偽だとしてあつかう文化が気に食わないと?
186デフォルトの名無しさん:2007/10/30(火) 18:51:00
そんなにtrueやfalseが好きならC言語とはきっぱり縁を切って
C++かdelphi使えよ
187デフォルトの名無しさん:2007/10/30(火) 18:55:21
>>185

>ifでの分岐の作動原理に、真偽がどうの、を期待するのが気に食わないと?

期待するのが正しい。
だから >>149 のような書き方をするのは良くない。

ただ、仕様上は、if 文は 0でないか、0と等しいか、で機械的に分岐するだけだから、
「真偽がどうの、を期待した書き方」、でなくても動いてしまう。
でもそういうの良くないよね、と。
188デフォルトの名無しさん:2007/10/30(火) 18:55:27
if(2 == !0){}

なぁおまいら、↑がfalseになるのはどう考えたら良い?
189デフォルトの名無しさん:2007/10/30(火) 18:56:36
>>184
>>141ではなにも証明されていません
「真はzero以外である」と言う命題において
「1であれば、真である」が、「真であれば、1である」というのであれば成り立ちません
「真はzero以外である」ので、ある時には「真は10である」かも知れないし、「真は'a'である」かもしれません
190デフォルトの名無しさん:2007/10/30(火) 18:57:18
>>188
環境にもよるのかもしれんが、シンプル。
!0が1になる。ので 2 == 1 はfalse。
191デフォルトの名無しさん:2007/10/30(火) 19:01:12
>>189
>「真はzero以外である」と言う命題において
>「1であれば、真である」が、「真であれば、1である」というのであれば成り立ちません

何言ってるの?
だれか一人でも、真であれば1である、なんて言ったのか?
真であればzero以外である、とは言ったが、1であるなんて限定した言い方は誰もしてないぞ。
192デフォルトの名無しさん:2007/10/30(火) 19:01:31
>>190
えっと、すまん携帯からなんで短く書きすぎた。
2は0以外で、!0は真だけど、異なるって言って良いの?って質問。
193デフォルトの名無しさん:2007/10/30(火) 19:04:22
0が偽、それ以外は真、なんて初歩中の初歩だろ・・・。なんでこんなに延びてるんだ。
194デフォルトの名無しさん:2007/10/30(火) 19:07:28
思うに、"真"のイメージが一致してないから、
話が噛み合って無いんじゃないかと。

プログラマはループが好きだしね。
195デフォルトの名無しさん:2007/10/30(火) 19:07:29
>>192
C言語の仕様上、真偽は本来「無い」。
論理型は整数型で代用されている。(根拠 >>34)
単なる整数値を真偽値として取り扱うのは、プログラマの責任。
196デフォルトの名無しさん:2007/10/30(火) 19:08:58
>>193
偽は0、真は0以外、で代用するが、
0が偽、0以外が真、は成り立たない。
197デフォルトの名無しさん:2007/10/30(火) 19:11:44
>>182
>「真は0以外」
>「0以外は真」
4つのうちどれ?
・規格上これらの両方が成立する
・前者のみが成立する
・後者のみが成立する
・どちらも成立しない
198デフォルトの名無しさん:2007/10/30(火) 19:14:41
もう一度書いておくが、C言語に、真偽値を表す機能自体は無い。
しかし、意味の上での真偽値は有る。
意味の上での真偽値は、いつでも整数値に格下げすることができる。
逆に、整数値を、いつでも意味の上での真偽値として使っているとは限らない。
199デフォルトの名無しさん:2007/10/30(火) 19:16:30
>>197
>>182 は そうとう頭悪いからそんな難しいこと聞いてもわからないって。
突然、>>189 みたいな意味不明なことを言いだすやつだぜ。
質問の意味もわかってないんじゃね。
200デフォルトの名無しさん:2007/10/30(火) 19:18:08
おまいら、こういう無駄っぽい論争は燃えるけど、
ムカつかせるような書き方は自重しようぜ。

論破してもどうせ皆名無しだし、対人ゲームみたいなもんだ。
201デフォルトの名無しさん:2007/10/30(火) 19:22:30
javaのライブラリで、関数がすべてthrows Exceptionになっている奴は
かなり下手だと思う。
202デフォルトの名無しさん:2007/10/30(火) 19:29:00
>>17
>むしろ、propetyとmethodの単純な二元論で設計しようとする場合の弊害を気にすべきです。
C++の場合、その単純な二元論で設計しない弊害の方が、はるかにでかい気がするんだが・・・
203デフォルトの名無しさん:2007/10/30(火) 19:29:21
思ったんだが、集合としての「0以外」と、
具体的な1要素としての「0以外」で話変わってくるんじゃね?
204デフォルトの名無しさん:2007/10/30(火) 19:35:08
>>201
同意。
あと逆にキャッチだけして無かったことにするやつ。
状況に応じてってのは分かるけど、
キャッチしてfalse返すだけとか、ちょっと待てって思う。
205デフォルトの名無しさん:2007/10/30(火) 19:35:25
>>196
それでは、「真はzero以外である」が成立しないだろ
zero以外が真でなければ、真は何なのか?
そんなの誰にも答えられないだろ

「真はzero以外である」と言う命題において
「1であれば真である」は成り立つ
「zeroであれば真ではない」も成り立つ
「真でなければzeroである」も成り立つ
しかし、
「真であれば1である」は成り立たない

同じく「真はzero以外である」と言う命題において
「コップであれば真である」は成り立つ
「zeroであれば真ではない」も成り立つ
「真でなければzeroである」も成り立つ
しかし、
「真であればコップである」は成り立たない
206デフォルトの名無しさん:2007/10/30(火) 19:36:58
>>205 じゃあ、俺は0じゃないから…tureなんだねブボボ(`;ω;´)モワッ
207デフォルトの名無しさん:2007/10/30(火) 19:39:11
命題云々の話はできても規格の話はできないのかな
208デフォルトの名無しさん:2007/10/30(火) 19:40:30
>>203
「0以外」は集合です。

もし、具体的な1要素として「0以外」を見るのなら、
範囲の集合 S = { (0以外), (1以上3以下), (-3以外), (4だけ) }
といった見方も有ります。
しかし、0以外、という言葉が、
「0以外に含まれている具体的な1要素」
を表すことはありません。
209:2007/10/30(火) 19:46:39
漏れも要素1の集合にしてください
210デフォルトの名無しさん:2007/10/30(火) 19:46:49
>>205
1行目の成立ってのをkwsk
C言語において「真はzero以外である」ってのは定義なんじゃねーの?
証明したりする類のことじゃない気がするんだが
211210:2007/10/30(火) 19:48:52
すまん、俺文盲だったわ
205だけ読んで理解しようとしてた
212デフォルトの名無しさん:2007/10/30(火) 19:49:42
>>205
まず、AであればBであるとき、
BであればAであるとは限らない、ということを理解すべき。

命題: 「真はzero以外である」、が成立するために、
逆: 「zero以外が真である」、が成立する必要は無い。
裏: 「真でなければzeroである」、も成立する必要は無い。
成立する必要があるのは、
対偶: 「zeroであれば真以外である」、だけ。

>「真はzero以外である」と言う命題において
>「1であれば真である」は成り立つ
なりたたない。
命題は、「真であればzero以外である」、と言っているだけで、
1 であれば 真 である、とは一言も言っていない。
1 は単なる 「1」 の意味かもしれない。
213デフォルトの名無しさん:2007/10/30(火) 19:50:56
>>204
こういうのは自分的にはOK。
 public int safeInt(String str, int errorValue){
  try {
   return Integer.parseInt(str);
  } catch (NumberFormatException e) {
   return errorValue;
  }
 }

キャッチして無かったことにするのはヘタでなくてバグだと思う。
214デフォルトの名無しさん:2007/10/30(火) 19:51:49
>>210
そうだよ
C言語に於いては「真はzero以外」であり、「zero以外なら真」だよ
特定の人だけ、「真はzero以外」だが「zero以外なら真」とは限らないと喚き散らしてるんだよ

もうね、zero以外であれば、文字型でも、整数でも、浮動小数点でも、真だって事が理解できないらしいんだ
だから、>>205みたいな証明じみた事をしなければならないのさ
215デフォルトの名無しさん:2007/10/30(火) 19:56:51
>>214
>C言語に於いては「真はzero以外」であり、「zero以外なら真」だよ
Cに限って言えばそれは無い。
zero以外の整数値を、真以外の意味で使うこともある。
だから「zero以外→真」は常に成り立たない。
数学上、常に成り立たつとは限らない命題は偽である。

>もうね、zero以外であれば、文字型でも、整数でも、浮動小数点でも、真
C言語には元々真も偽もない。
意味の上だけの真や偽が浮遊しているに過ぎない。
216デフォルトの名無しさん:2007/10/30(火) 19:57:04
>>214
特定の人とは要するにキチガイでお邪魔虫だろ
だからそういう人は無視すればいいんだよ
217デフォルトの名無しさん:2007/10/30(火) 19:59:04
>>215
何言ってんの?
評価は真だって話だろ?運用の話なんてしてねえよ。
218デフォルトの名無しさん:2007/10/30(火) 19:59:08
>>212
1は単なる「1」かも知れないが、それは、zeroでは無い
つまり、「真はzero以外」であるならば、「1はzeroでは無いから真である」
そして、君が言う対偶というのは、「真であれば1である」と言うのが対偶だ
けして、命題を反対から読むことではない
219デフォルトの名無しさん:2007/10/30(火) 20:02:19
>>215
ああ、君は真偽以外の話もしてたの?
220デフォルトの名無しさん:2007/10/30(火) 20:02:20
>>218
いい加減に「逆は必ずしも真ならず」って理解してくれませんか?
あなた頭悪すぎですよ。
221デフォルトの名無しさん:2007/10/30(火) 20:07:39
>>213
上で書いた状況に応じてってのがまさにそれのことw
それは俺もOK。

>バグ
そういう仕様のメソッド、と言われると中々ね・・・。
最低でもログにスタックトレース出してくれないと泣ける。
222デフォルトの名無しさん:2007/10/30(火) 20:09:37
今日も大漁だなw
223デフォルトの名無しさん:2007/10/30(火) 20:10:18
>>218

>1は単なる「1」かも知れないが、それは、zeroでは無い
↑これは正しい
>つまり、「真はzero以外」であるならば、「1はzeroでは無いから真である」
↑これはおかしい。
↑命題は 「真→zero以外」 とは言っているが、決して 「zero以外→真」 とは言っていない。
↑よって、「真はzero以外」 ということを根拠に、「1はzeroでは無いから真である」
↑ということを言うことは出来ない。

>そして、君が言う対偶というのは、「真であれば1である」と言うのが対偶だ
>けして、命題を反対から読むことではない
「真→zero以外」 の対偶は
「zero→真以外」 です。
だいたい「1」なんて言葉は一言も命題に使われていない。どっから出てきたのか。
勝手に数学の定義を変えないで。
224デフォルトの名無しさん:2007/10/30(火) 20:10:59
C++のコード、あるクラスのメンバ変数(ファイルハンドラ)があったとして、
次のようなソースコードを見かけてしまった。

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;
}
}


これって、どう思う?
225デフォルトの名無しさん:2007/10/30(火) 20:12:14
なんかどちらも正しい気がする。
ただ噛み合って無いって感じ。

それと、キチガイとか頭悪いとか言い出すのは負けだと思った方がいい。
226デフォルトの名無しさん:2007/10/30(火) 20:13:18
補足。
どちらも、ってのは両者の言い分のこと。
227デフォルトの名無しさん:2007/10/30(火) 20:13:47
>「真→zero以外」
規格上これは正しい?
228デフォルトの名無しさん:2007/10/30(火) 20:14:14
>>217
整数を評価した結果は「整数」でしかありません。
if 文は式が 0でないか、0と等しいか、に基づいて、機械的に分岐するだけです。
229デフォルトの名無しさん:2007/10/30(火) 20:14:27
>>225
いや、基地外にははっきりと基地外と言った方がいい
だって全然議論にもなってないじゃんこれ
230デフォルトの名無しさん:2007/10/30(火) 20:14:44
if( 0以外 )

を偽と評価する事があるんだったら見てみたい。
231デフォルトの名無しさん:2007/10/30(火) 20:15:50
>>223


↓←← →

→ → ↓
232デフォルトの名無しさん:2007/10/30(火) 20:16:32
逆裏対偶なんて脇道はどうでもいいんだよ。
真理値を意味する整数型を算術演算したり数値を意味する整数型を論理演算するのはヘタ。
これでいいじゃん。
233デフォルトの名無しさん:2007/10/30(火) 20:17:18
>>227
>>34 を 参照してください。
234デフォルトの名無しさん:2007/10/30(火) 20:17:32
同意。
235デフォルトの名無しさん:2007/10/30(火) 20:18:18
234は>>232
236デフォルトの名無しさん:2007/10/30(火) 20:18:19
>>233
君誰?
237デフォルトの名無しさん:2007/10/30(火) 20:19:48
あと、真面目に読んでなかったからあれなんだけど、
↓はどういう意味?

> 同じく「真はzero以外である」と言う命題において
> 「コップであれば真である」は成り立つ
> 「zeroであれば真ではない」も成り立つ
> 「真でなければzeroである」も成り立つ
> しかし、
> 「真であればコップである」は成り立たない

「コップであれば真である」は成り立つ
って何よ。つーかコップがどうしたの? どっから出てきたの?
238デフォルトの名無しさん:2007/10/30(火) 20:20:24
zero以外の物の例としてコップを挙げただけだろ
239デフォルトの名無しさん:2007/10/30(火) 20:20:42
>>236
いつもの人
240デフォルトの名無しさん:2007/10/30(火) 20:21:22
>>230
ヨロシクー
241デフォルトの名無しさん:2007/10/30(火) 20:22:02
>>237
屁理屈そのものだな
詭弁法だよ

詭弁の特徴のガイドライン
6:一見関係ありそうで関係ない話を始める
242デフォルトの名無しさん:2007/10/30(火) 20:22:38
>>238
で、コップは真なのですか?
コップはコップでしょ。

> 「コップであれば真である」は成り立つ

とか自分で書いてて、変だなぁとか思わなかったの?
243デフォルトの名無しさん:2007/10/30(火) 20:22:49
>>237
展開がおかしくないか?

まず「真はヤカン以外である」があって
「コップであれば真である」

「真であればコップである」とは限らない
というのなら解るんだけど。
244デフォルトの名無しさん:2007/10/30(火) 20:24:48
>>242
なんで俺に言ってるの?
俺は書いてないよ
書いた人に言ってね
245デフォルトの名無しさん:2007/10/30(火) 20:26:36
John Lennon is dead.
GOD is dead.
∴John Lennon is GOD.
246デフォルトの名無しさん:2007/10/30(火) 20:26:45
>>224
俺はよくそれやる。
でも俺自身は再オープンするコードは書かないw

あと、初期化子使った方が良い、というかCloseHandleするauto_ptr的なハンドル保持クラスを使う。
247デフォルトの名無しさん:2007/10/30(火) 20:27:50
>>230 >>240
読み飛ばしてたごめん。

if 文は 真偽を評価するわけではない。
ただ、0でないか、0と等しいか、で分岐するだけ。
>if( 0以外 )
は 0 と等しくないので、以降に続くブロックは実行される。
結局、0以外が「真」と評価された、かどうかまでは判らない。
C言語には元々真偽はなく、整数で代用されている。
C言語で言うところの真偽は、意味上のものでしかない。
248デフォルトの名無しさん:2007/10/30(火) 20:29:07
>>244
ごめんごめん、もうだれがだれだかわけわかめ
249デフォルトの名無しさん:2007/10/30(火) 20:30:01
>>247
そんなこと解りきっとるわ!
if(){
//真
}
else{
//偽
}

だって話してたんだろ今まで!!
250デフォルトの名無しさん:2007/10/30(火) 20:30:22
>>232が結論だろ常考
251デフォルトの名無しさん:2007/10/30(火) 20:32:49
>>250
お疲れ
252デフォルトの名無しさん:2007/10/30(火) 20:34:21
>>188
が絡んでたのか。このぐっちゃりした議論の原因がわかった。
253デフォルトの名無しさん:2007/10/30(火) 20:39:05
>>249
そんな定義は何処にも無い。
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){ /* 真 */ } となるようにするのは、あくまでプログラマの責任。
254デフォルトの名無しさん:2007/10/30(火) 20:43:49
exp != 0
が真だからif statementに入るんでそ。
255デフォルトの名無しさん:2007/10/30(火) 20:48:31
exp != 0
の戻り値が1だから
256デフォルトの名無しさん:2007/10/30(火) 20:48:33
>>254
そう。だからexpが真か偽かは関係ないってこと。
257デフォルトの名無しさん:2007/10/30(火) 20:48:52
>>252
188で言いたかったことが伝わった気配w

抽象と具体でズレてるんじゃないかって。
258デフォルトの名無しさん:2007/10/30(火) 20:49:38
だから、真はzeroじゃない
つまり、zeroでなければ真
1だろうと10だろうと'a'だろうと全部、真なんだよ
真で無い物はzeroだけなんだよ

じゃあzero出ない物は何なんだよ
259デフォルトの名無しさん:2007/10/30(火) 20:51:46
>>258
それは逆がたまたま真である場合だね
基本的にその使い方は間違ってるから
260デフォルトの名無しさん:2007/10/30(火) 20:51:59
>>256
expが真か偽かなんて話どっから沸いて来たの?
最初っから最後までずっとexp!=0の話だろ?
261デフォルトの名無しさん:2007/10/30(火) 20:52:33
>>232 に盛大に拍手しつつ、
>>254 がまたしても確信を突いた希ガス!
262デフォルトの名無しさん:2007/10/30(火) 20:52:53
真は皆の心の中にあるってばっちゃが言ってた
263デフォルトの名無しさん:2007/10/30(火) 20:53:26
>>259
「真はzeroじゃない」っていってんだよ
zeroで無い物はなにか答えろよ!
264デフォルトの名無しさん:2007/10/30(火) 20:53:33
具体的(機能的)にはC言語に真偽値は無いが、
抽象的(意味上)には真偽はある、と何度も何度も言ってるのだがなぁ。
そして、意味の上での真偽値は、いつでも整数値に格下げできると。
逆に、整数値を、意味の上での真偽値に格上げするのは、
ダウンキャストになるから、いつでも正しいとは限らないと。
265デフォルトの名無しさん:2007/10/30(火) 20:54:30
>>263
論理を無視して何をファビョってんの?
みっともないからやめなよ
266デフォルトの名無しさん:2007/10/30(火) 20:55:02
>>260
if(exp)
↑は↓
if(exp!=0)

こういう事?
267デフォルトの名無しさん:2007/10/30(火) 20:56:22
>>265
だから、「真はzeroじゃない」だろ
じゃ、zeroで無い物はなんなの?
ってずっと聞いてるんじゃん
要領得ない答えばかり言ってないで、バッシッと判りやすく答えてよ
268デフォルトの名無しさん:2007/10/30(火) 20:57:03
>>267
対偶なら答えてあげる。
「真ならzeroではない」の対偶は「zeroであれば真ではない」
269デフォルトの名無しさん:2007/10/30(火) 20:57:15
なんで!=0が出てくるんだ?
270デフォルトの名無しさん:2007/10/30(火) 20:57:57
>>264
ああ、ブーリアン代数で話してたのね。
それは解った。というか解ってる。
書き方が下手だね。

>>188

!0は0以外を返すので2とは限らない。
271デフォルトの名無しさん:2007/10/30(火) 20:58:37
>>268
そんなことが知りたいんじゃないよ
「真はzeroじゃない」時の「zero出ない物が何なのか」知りたいんだよ
272デフォルトの名無しさん:2007/10/30(火) 20:59:10
確信に迫って参りました。

>>264
> 逆に、整数値を、意味の上での真偽値に格上げするのは、
> ダウンキャストになるから、いつでも正しいとは限らないと。

「整数値を、意味の上で真偽値に格上げ」
これの意味がまず分からない。

例えば !strcmp の例なら、
「整数値は、意味の上でも整数値」であって、
void *p = NULL; if (!p) {}
の場合なら、
「ポインタ値(?)は、意味の上では整数値」であって、
どうにも、
「整数値を、意味の上での真偽値に格上げ」が見えてこない。
273デフォルトの名無しさん:2007/10/30(火) 20:59:19
マジID出すべきだろこの板。
つかjavaとかC++の話題振った人にレスしたの俺だけかよ。
274デフォルトの名無しさん:2007/10/30(火) 20:59:31
>>271
他の人に聞いて
275デフォルトの名無しさん:2007/10/30(火) 21:00:28
>>258
「true→nonzero」 だからといって
「nonzero→true」 が必ずしも成り立つとは限らない、って何度も言ってるだろ。

> 1だろうと10だろうと'a'だろうと全部、真なんだよ
1や10や'a'をどう捉えるかは、書き手や読み手に委ねられている。
場合によっては、trueを表しているかもしれないし、単に1や10や'a'ってだけかもしれない。

一方、true といったら、nonzero 以外は有りえない。

>じゃあzeroでない物は何なんだよ
単に「zeroでないもの」でいいだろ。
276デフォルトの名無しさん:2007/10/30(火) 21:00:54
277デフォルトの名無しさん:2007/10/30(火) 21:01:42
おいおい、どうなってんだよ
誰も、「真がzeroじゃない」時の「zeroで無い物が何なのか」知らないのかよ!
278デフォルトの名無しさん:2007/10/30(火) 21:02:31
>>270
>!0は0以外を
そんなことは分かった上で投下してるんだよ・・・
279デフォルトの名無しさん:2007/10/30(火) 21:03:25
やっぱりニートの頭は一般社会人の思考とは随分とズレがあるなあ
さっさと世の中の辛酸舐めた方がいいよ
280デフォルトの名無しさん:2007/10/30(火) 21:05:07
>>277
>「真がzeroじゃない」時の
多分君は『「真がzeroじゃなくてzeroじゃない物が真である」時の』で考えてるんだよね?
281デフォルトの名無しさん:2007/10/30(火) 21:05:24
>>276
昔提案したけど臆して回答出来なくなる奴が出るって却下されたの。
だから愚痴風味。
282デフォルトの名無しさん:2007/10/30(火) 21:06:28
>>272
だから if( !p ){} は本当は良くないんだよ。
だけど、0 の値を持ったポインタには特別な意味があるから、よしとされている。
一方整数の 0 には特別な意味は無い。
なので、if( !i ){} なんて書かない。
283デフォルトの名無しさん:2007/10/30(火) 21:06:34
>>275
説明になってねぇーよ
なんで成り立たないのかちゃんと説明しろよ
書き手とか、読み手とか、そんな物は、規格には書いてないだろうが勝手に作るな

「真がzeroじゃない」時の「zeroで無い物が何なのか」聞いてるんだよ
規格に書いてある事だけで説明しろよ
284デフォルトの名無しさん:2007/10/30(火) 21:08:00
>>283
nonzero
辞書をひけ
285デフォルトの名無しさん:2007/10/30(火) 21:08:14
スコープがずれまくってんな。わざとずらしてんのか?
286デフォルトの名無しさん:2007/10/30(火) 21:08:41
>>277
「zeroでないもの」 は 「zeroでないなにか」 だよ。
zeroでない何かであれば何でも良い。
287デフォルトの名無しさん:2007/10/30(火) 21:08:56
>>282に同意
ポインタの"0"は全ビット0とは限らないからな
288デフォルトの名無しさん:2007/10/30(火) 21:10:23
>>285
おそらくメダパニかと
289デフォルトの名無しさん:2007/10/30(火) 21:10:59
>>283
規格書の言葉を借りると、「0でないもの」 は nonzero である。
290デフォルトの名無しさん:2007/10/30(火) 21:11:06
>>286
「真がzeroじゃない」時が消えてるぞ
俺が知りたいのは「真がzeroじゃない」時の「zeroで無い物が何なのか」だってずっと聞いてるんだが
291デフォルトの名無しさん:2007/10/30(火) 21:11:25
>>286
コップでもいい?
292デフォルトの名無しさん:2007/10/30(火) 21:11:36
if (exp) {
  hoge(foo);
} else {
  hoge(bar);
}
293デフォルトの名無しさん:2007/10/30(火) 21:12:45
>>282
> 一方整数の 0 には特別な意味は無い。
> なので、if( !i ){} なんて書かない。

この場合は、ifの整数的利用法として解釈し、
機械的に if ( ! (i == 0)) と読み替えれば、
真偽値を期待された整数であろうと、
そうでない整数であろうと、ともに真偽値として意味する。
294デフォルトの名無しさん:2007/10/30(火) 21:12:45
>>283
多分、
!0は0では無い。て言いたいんだろうと思うよ。
で!0はなにかっていうと!0でしかない。
で、たとえば1は!0かどうか考える時、
!0は1である可能性はあるけど、1とは限らない。
と言いたいんだろう。
君が聞きたい事とは全く違うベクトルで話してるからかみ合わないんだと思う。
295デフォルトの名無しさん:2007/10/30(火) 21:14:10
訂正:
機械的に if ( ! (i != 0)) と読み替えれば、
296デフォルトの名無しさん:2007/10/30(火) 21:15:10
>>294
論理演算の結果は0か1だよ
297デフォルトの名無しさん:2007/10/30(火) 21:16:09
処理系依存だろ
298デフォルトの名無しさん:2007/10/30(火) 21:18:15
>>294
何言ってるんだ?
スレの流れ見ろよ
「真がzero以外」なのに、「zero以外は真じゃない」って言う流れなんだぞ
「真は!0」だが、「!0は真では無い」という流れだから
「真がzero以外」の時の「zero以外は一体何なのか」と聞いている
299デフォルトの名無しさん:2007/10/30(火) 21:18:59
真はもう死んだんだ・・・
300デフォルトの名無しさん:2007/10/30(火) 21:19:00
>>298
解ってるよ。
だからかみ合ってないよ、って言ってるのに。
301デフォルトの名無しさん:2007/10/30(火) 21:19:30
要するにお前ら、ここで話しをするのが好きなんだろ?
302デフォルトの名無しさん:2007/10/30(火) 21:20:38
はなしし?
303デフォルトの名無しさん:2007/10/30(火) 21:20:45
>>299
【審議中】
    |∧∧|       (( ) )   (( ) )  ((⌒ )
 __(;゚Д゚)___   (( ) )   (( ⌒ )  (( ) )
 | ⊂l     l⊃|    ノ火.,、   ノ人., 、  ノ人.,、
  ̄ ̄|.|.  .|| ̄ ̄   γノ)::)  γノ)::)   γノ)::) 
    |.|=.=.||       ゝ人ノ  ゝ火ノ   ゝ人ノ
    |∪∪|        ||∧,,∧ ||∧,,∧  ||  ボォオ
    |    |      ∧ (´・ω・) (・ω・`) ∧∧
    |    |      ( ´・ω) U) ( つと ノ(ω・` )
   ~~~~~~~~     | U (  ´・) (・`  ). .と ノ
              u-u (    ) (   ノ u-u
                  `u-u'. `u-u'
304デフォルトの名無しさん:2007/10/30(火) 21:21:05
>>300
俺に言うな、「真がzero以外」なのに、「zero以外は真じゃない」って言う奴等に言え
俺は、その事を話すのに疲れた
後は、奴等にその理由をちゃんと納得できるように問いただすだけだ
305デフォルトの名無しさん:2007/10/30(火) 21:22:03
>>290
「真がzeroじゃない」時の「そのzeroで無い物」 は対象です。

>>291
コップを持ってきたからといって、それが true になるかどうかはわかりません。
わかっているのは、true のときに、nonzero だということだけです。

「true → nonzero」 だからといって
「nonero → true」 だとは限らない、と何度言えばわかるのか。
306デフォルトの名無しさん:2007/10/30(火) 21:23:29
>>302
storyじゃなくてtalkingの方だよ
307デフォルトの名無しさん:2007/10/30(火) 21:23:39
>>305
お前もしつこいな。
聞いてる事に対する答えがずれてるっていうの。
ブーリアン代数の話してるんじゃねーってば。
308デフォルトの名無しさん:2007/10/30(火) 21:24:17
>>302
凄い知能だな……さすがだ
309デフォルトの名無しさん:2007/10/30(火) 21:25:01
>>293
ではあなたはそう書けば?
ヘタだなぁと言われるだろうけど。

単項演算子「!」は機能としては式を取とるが、
意味の上では論理値を取ることを期待されている。
それをそういう状態に保つのはプログラマの責任。
310デフォルトの名無しさん:2007/10/30(火) 21:25:12
>>305
答えになってない、前提が変わっている
あくまでも、「真がzeroじゃない」時、「zeroでない物が真で無いこと」を証明してもらわなければ納得できるわけが無いでしょう
311デフォルトの名無しさん:2007/10/30(火) 21:25:15
>>305
逆じゃないのか?
「nonzeroをtrueとして扱う(判断する)」
「zeroをfalseとして扱う」
のでは?
312デフォルトの名無しさん:2007/10/30(火) 21:26:42
数学板池
313デフォルトの名無しさん:2007/10/30(火) 21:27:20
数学いた住人として言わせてもらえば、こんなのに来られたら凄い困る。
314311:2007/10/30(火) 21:27:21
で、
zeroをfalseと扱うなら、対偶を取って
falseでない(trueなら)ば、zeroでない
315デフォルトの名無しさん:2007/10/30(火) 21:28:30
>>298
>「真がzero以外」なのに、「zero以外は真じゃない」って言う流れなんだぞ
>「真は!0」だが、「!0は真では無い」という流れだから
>「真がzero以外」の時の「zero以外は一体何なのか」と聞いている

「true → nonzero」 のとき、nonzero が何か特別な意味を持っていないといけないということは無い。
316デフォルトの名無しさん:2007/10/30(火) 21:28:46
>>297
古いコンパイラならね
317デフォルトの名無しさん:2007/10/30(火) 21:29:17
>>309 いやいや、俺も書かないですよw

736 名前: デフォルトの名無しさん [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 が多いので、その心理を想像してみただけ。
318デフォルトの名無しさん:2007/10/30(火) 21:31:08
「zeroでない物は真」

真がzeroじゃない時↑を成立させない為にはzeroでない物が真で無い例を示せばいい
319デフォルトの名無しさん:2007/10/30(火) 21:32:02
>>311
そうそうそれそれ

「nonzeroをtrueとして扱う(判断する)」
「zeroをfalseとして扱う」
という話と

「nonzeroを0以外として扱う(判断する)」
「zeroを0として扱う」
とした上でnonzeroは1ではないという話が混ざってる。
320デフォルトの名無しさん:2007/10/30(火) 21:34:22
>>310
????
>「真がzeroじゃない」時、「zeroでない物が真で無いこと」を証明してもらわなければ納得できるわけが無いでしょう

なに言ってるの? ついに壊れた?
「true → nonzero」 を証明するために、
「nonzero → non true 」 を証明するの?
もうわけ判らないのだが。
「nonzero → non true」 を証明したからといって、
「true → nonzero」 を証明したことにはならないのだが。
しかも、「nonzero → non true」 と 「true → nonzero」 は相反してるし。
321デフォルトの名無しさん:2007/10/30(火) 21:34:30
>>315
nonzeroに特別な意味があったとして、それがtrueで無いと言う根拠がない

>>318
そう言うこと
322デフォルトの名無しさん:2007/10/30(火) 21:37:13
>>320
お前が言ってるんだろうが
「真がzeroじゃ無い」時、「zeroは真とは限らない」と
だから、それを証明してくれよ
323デフォルトの名無しさん:2007/10/30(火) 21:37:22
>>318
1とか2とか3とかを整数として使っている場合。
324デフォルトの名無しさん:2007/10/30(火) 21:38:10
>>323
前提が変わってるよ
325デフォルトの名無しさん:2007/10/30(火) 21:38:24
>>322
逆であるから特に証明の必要なし
326デフォルトの名無しさん:2007/10/30(火) 21:38:32
数学的に話たところで、cの土俵ではcの話にしかならないよ。

c言語のint型の返り値の型の関数でさ、
真か偽を返すって言われたら0かそれ以外だろうと直感的に分かるけど、
0かそれ以外を返すって言われても論理値だと言いたいのか分からない、
ってことじゃない?
327デフォルトの名無しさん:2007/10/30(火) 21:39:49
>>323
だから、なんで「真はzeroじゃ無い」が無くなるの?
328デフォルトの名無しさん:2007/10/30(火) 21:40:34
>>321
>nonzeroに特別な意味があったとして、それがtrueで無いと言う根拠がない
nonzero が trueでない根拠も無いが、一方で、trueである根拠も無い。
どちらともいえない。
だから、「nonzero → true」 は常に成り立つとは限らない。
ゆえに偽。
329デフォルトの名無しさん:2007/10/30(火) 21:41:53
ちなみに俺はsizeof(char)省略スレ常連だったw
他はどうよw?
330デフォルトの名無しさん:2007/10/30(火) 21:42:38
>>324
だから
「真がzeroじゃ無い」時、「zeroは真とは限らない」があるって言うんだろ
つまり、「真がzeroじゃ無い」時、「zeroは真では無い」場合があるんだろ?
じゃあ、「真がzeroじゃ無い」時、「zeroは真では無い」場合を証明してもらわないと
「真がzeroじゃ無い」時、「zeroは真とは限らない」は成立しないだろう
331デフォルトの名無しさん:2007/10/30(火) 21:44:40
>>329 主に宿題スレ、Objective-Cスレにチョコチョコ出席してます。
332デフォルトの名無しさん:2007/10/30(火) 21:45:47
>>328
> nonzero が trueでない根拠も無いが、一方で、trueである根拠も無い。
trueであるのには「true → nonzero」と言う立派な根拠があるのですが?
333デフォルトの名無しさん:2007/10/30(火) 21:46:23
>>322
>「真がzeroじゃ無い」時、「zeroは真とは限らない」

なんでこんな事を証明する必要がある?
まぁいいや。

「zeroは真とは限らない」
証明:
整数の意味で 0 を使っている場合、それは偽の意味で使っているわけではない。
まして、真の意味で使っていない。(zeroは真とは限らない)
整数の 0 の意味で使っていると本人が言っているのだから、
0 を整数の 0 の意味で使った場合、0 には整数の 0 以上の意味は無い。
334デフォルトの名無しさん:2007/10/30(火) 21:46:45
>>324御免
>>330>>325宛だ...orz
335デフォルトの名無しさん:2007/10/30(火) 21:47:41
何 C言語の話してるんじゃないの?
336デフォルトの名無しさん:2007/10/30(火) 21:48:07
昔ながらのc言語では真は0以外の整数として扱われる。
0以外の整数は「論理値として考えた場合」に真になる。
で、「0以外」という言葉、表現そのものには真偽の意味は持っていない。

と、言いたいんだと思うが、どう?
337デフォルトの名無しさん:2007/10/30(火) 21:49:07
338デフォルトの名無しさん:2007/10/30(火) 21:49:33
>>333
そして、
ifなどの条件として指定され、
整数の比較 != 0 をされて始めて、
その比較の結果には真偽値としての意味がある、って主張?
339336:2007/10/30(火) 21:49:40
てにはをがおかしいのは脳内で直して。
340デフォルトの名無しさん:2007/10/30(火) 21:50:28
>>327
何が言いたいのか意味が判らないんだよ。
もっとわかりやすく言えよ。
1とか2とか3とかを整数として使っている場合、1や2や3はtrueの意味で使っているわけではない。
そういう「反例」があるために、
「 nonzero → true 」
は一般化できないの。つまり偽。
341デフォルトの名無しさん:2007/10/30(火) 21:51:22
誰かもうわからなくなったんだけど、

if( exp != 0){

}
else{

}

においてexpが0以外で且つelseに飛ぶ値は何だ?
と聞いてるんだと思うんだけど。
342デフォルトの名無しさん:2007/10/30(火) 21:53:19
>>340
前提が変わってるよ
343デフォルトの名無しさん:2007/10/30(火) 21:54:38
ifなどの条件 intvalue として指定され、
整数の比較 intvalue != 0 をされて始めて、
その比較の結果には真偽値としての意味がある、って主張?

intvalueは整数であって、0であろうが1でも2でも3であっても真偽値ではない。
intvalue != 0の評価値は、真偽値である。

ってこと?
344デフォルトの名無しさん:2007/10/30(火) 21:55:08
>>330
C言語において、zero を true の意で使うことは無い。
命題に対する対偶の証明終わり。

>>332
「true → nonzero」といってるだけで、
「nonzero → true」とは言ってない。
だから、「true → nonzero」 だからといって、
nonzero が true かどうかは判らない。
345デフォルトの名無しさん:2007/10/30(火) 21:55:26
>>341
エエー
>>336とか見てよ。値の話じゃなくてさ、意味を含むとかの話なんだよ。
で、意味の一貫性の無い書き方はヘタっていう議題だと思うよ。
346デフォルトの名無しさん:2007/10/30(火) 21:56:54
>>336
どんぴしゃ。
347デフォルトの名無しさん:2007/10/30(火) 21:57:40
>>340
だからなんで、前提条件の「真はzeroじゃ無い」が無くなるの?
その「zero」は、整数であるか、浮動小数点であるか、文字であるか何も書いてないんだよ
なんで、あんたがそれを決められるの?
348デフォルトの名無しさん:2007/10/30(火) 21:58:22
>>345

>>336はまあ当たり前なんだけど、なんかズレ合った意識の元白熱した戦いが続いているんです。
349デフォルトの名無しさん:2007/10/30(火) 21:59:18
>>344
>C言語において、zero を true の意で使うことは無い。
もしかして無いという証拠があるの?
350デフォルトの名無しさん:2007/10/30(火) 21:59:50
>>344
質問していい

「nonzero → falseでない」

は正しいのか?
351デフォルトの名無しさん:2007/10/30(火) 22:00:35
>>349
悪魔の証明ってご存知ですか?
352デフォルトの名無しさん:2007/10/30(火) 22:01:02
>>341
それは、expが0と等しいか等しくないか調べているだけであって、
expの真偽と関係ないじゃん。
353デフォルトの名無しさん:2007/10/30(火) 22:01:58
>>352
そうだよ。
だからズレてるって何回書けばいいんだろう。
・expが0と等しいか等しくないか
・exp自体の真偽
という二つが混ざってるんだってば。
354デフォルトの名無しさん:2007/10/30(火) 22:04:06
>>343
そんなことは無い。
if ( a >= 0 ) とかかれた場合、a >= 0 の評価結果は整数値だが、
意味の上では真偽値だ。いちいち !=0 と比較しなければならないということはない。
ただ、if( !a ) と書くのは変だろ。
ちゃんと if( a==0 ) と書けと。
355デフォルトの名無しさん:2007/10/30(火) 22:05:42
>>351
もちろん知ってるよ。
だから「もしかして」と言ってる。
356デフォルトの名無しさん:2007/10/30(火) 22:05:45
c++にて。

bool b=5; //警告が出る
int n=true; //出ない

357デフォルトの名無しさん:2007/10/30(火) 22:05:50
>>347
一般化するってのは、前提条件を外すから一般かなわけ。
一般化できないってのなら、一般的にいえないってことだから、
その命題は偽ってこと。
358デフォルトの名無しさん:2007/10/30(火) 22:06:45
char c = NULL;
359デフォルトの名無しさん:2007/10/30(火) 22:08:07
int n;
if (n) {...}
else {...}
で、nが0以外のときにelseに入ったり
0のときにifに入ったりすることは無いだろうが
真偽値がどうこう言いたいなら!=0でもつけてろよ
0以外=真、0=偽として扱ってるんだと思ってたが
360デフォルトの名無しさん:2007/10/30(火) 22:08:11
>>350
nonzero が falseでない ことは有る。

反例)
整数の意味で1や2や3を使った場合、それは「falseでない」という意味で使った
わけではない。
361359:2007/10/30(火) 22:08:50
ごめ、最後の行は消し忘れ
362デフォルトの名無しさん:2007/10/30(火) 22:10:35
>>358
c++?
苦肉の策でNULLを型も無い"0"と定義しちゃったんだよね。
363デフォルトの名無しさん:2007/10/30(火) 22:11:17
>>354
Cでは「等価」
364デフォルトの名無しさん:2007/10/30(火) 22:11:44
>>354 付き合ってもらって悪いねぇ…。ちょっと補足してみるね。

int boolvalue; // 真偽値として使いたい整数
int intvalue; // 整数として使いたい整数

があるとき、ifなどの条件に intvalue を指定した時、
暗黙的に(?)内部で(?)整数の比較 intvalue != 0 をされて始めて、
その比較の結果には真偽値としての意味がある、って主張?

元のintvalueは整数であって、0であろうが1でも2でも3であっても真偽値ではない。
ifが分岐するためのintvalue != 0の評価値は、真偽値である。

ってこと?
365デフォルトの名無しさん:2007/10/30(火) 22:11:44
>>349
規格書レベルで、ture は nonzero だと書いてある。
true は nonzero であることの十分条件であり、
nonzero は true であることの必要条件。
nonzero でないなら true であることの必要条件を満たさない。
366デフォルトの名無しさん:2007/10/30(火) 22:12:19
>>357
前提条件を外したらだめだよ
367デフォルトの名無しさん:2007/10/30(火) 22:15:38
>>359
なんどもいうが、C言語に真偽値は無い。整数型で代用している。
if文も機能的に言えば、0と等しくないかどうかで分岐しているだけ。
C言語での真偽値は意味の上にしか存在しない。

true の意味で、nonzero を使ってます ってことは言えても、
nonzero のときは、常に true の意味だ、とは言えない。反例が出てくる。
368デフォルトの名無しさん:2007/10/30(火) 22:17:51
>>363
機能的には等価だが、意味の上での区別はつけるべきだ。
仕様書にも、「 true を返す 」 とかシレっと出てくる。
つまり、意味の上での true や false はあるってことだ。
機能的には無いが。
369デフォルトの名無しさん:2007/10/30(火) 22:18:13
上手いプログラムはソースから意味・意図が読み取り易い。
下手なプログラムはソースから意味・意図が読み取り辛い。

だろ?
370デフォルトの名無しさん:2007/10/30(火) 22:19:52
true (nonzero) の記述を根拠にして延々話が広がっているが
nonzero (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
371デフォルトの名無しさん:2007/10/30(火) 22:20:37
>>364
C言語には、真偽値は無い、という主張。
!=0と比較して初めて意味があるとか、そういうことではない。
if文は単に式を0と等しくないかどうかという基準で分岐するだけのもの。
真とか偽とかは関係ない。
真とか偽とかは、あくまでプログラマが付加するもの。
という主張。
372デフォルトの名無しさん:2007/10/30(火) 22:21:15
>>368
だから意味も「等価」
373デフォルトの名無しさん:2007/10/30(火) 22:21:27
上手いと安い。
下手いとからい。

カレーとか作(r
374デフォルトの名無しさん:2007/10/30(火) 22:22:11
>>366
それはお前の決めることではない。
一般的にいえなければ、その命題は偽。
数学的にそう決まっている。
特殊な条件を付け加えれば、どんな条件でも成り立つ。
それじゃ意味が無い。
375デフォルトの名無しさん:2007/10/30(火) 22:22:34
うむ。
そして実行効率と保守性が高いのが良いプログラム

だな
376デフォルトの名無しさん:2007/10/30(火) 22:23:33
>>370
今さら?
377デフォルトの名無しさん:2007/10/30(火) 22:25:26
>>367
falseもnonzeroなら、確かに反例が出てくるな
378デフォルトの名無しさん:2007/10/30(火) 22:26:14
>>374
じゃこっちも前提外そう。
外した。

「trueはnonzeroじゃない」
379デフォルトの名無しさん:2007/10/30(火) 22:26:25
>>370
それは、true を nonzero で表現しているという、
特殊な条件において、一時的に「nonzero → true」 が成り立っているだけ。
一般的に「nonzero → true」 がいえるわけではない。

また、「true → nonzero」 の根拠として、「true (nonzero)」を挙げているわけではない。
「true → nonzero」 の根拠は >>34 や、
規格書のあちこちにでてくる、「true を 返す」 という表記。
380デフォルトの名無しさん:2007/10/30(火) 22:27:14
>>370
ちょww過去レスにgotoする気かw
381デフォルトの名無しさん:2007/10/30(火) 22:28:21
>>372
意味は等価ではない。
規格書でも、「nonzero を返す」という表現は使わず、「trueを返す」という表現が使われている。
もし区別しないのなら、nonzeroを返す、と書くべきだろ。
382デフォルトの名無しさん:2007/10/30(火) 22:28:47
前スレ>>80はトリ付けてくれ。
ここまで頑張るなら、どの意見がアホの意見か分かったほうが、見ている人にとってもありがたい。

>>34
オペレータ'<'や'<'が1か0を返すって(型はint)のは書いてあるけど、それがbool型を意味するとは書いてないよ。
0<1が成立するとき、オペレータ'<'はint型の1を返すということしか書かれていません。
返された1or0がbool型を代用しているってのはどこに書いてあるのですか?
383デフォルトの名無しさん:2007/10/30(火) 22:29:08
>>373
審議t(
384デフォルトの名無しさん:2007/10/30(火) 22:30:01
>>378
それがどうしたの?
あってるじゃん。
385デフォルトの名無しさん:2007/10/30(火) 22:30:58
おまいらヘタなコードの話をしようぜ
386デフォルトの名無しさん:2007/10/30(火) 22:31:57
>>382
お前さんの方がアホの意見と思ってるのが、
最低2人、おそらく3人は居る模様。
387デフォルトの名無しさん:2007/10/30(火) 22:32:06
>>374
一般化するなら外していい前提と外したらいけない前提があるだろ
388デフォルトの名無しさん:2007/10/30(火) 22:34:46
>>367
if(nonzero)はelseに飛ばないでしょ?
nonzero→ifの中身を実行→真
zero→elseの中身を実行→偽
みたいな解釈でいいだろ。
別に実装に忠実に「0以外だから実行」と解釈しても
↑みたいに捉えて「真だから実行」でもどっちでもいい気が
389デフォルトの名無しさん:2007/10/30(火) 22:35:14
>>367
if文、while文、do〜while文、for文などの条件式を必要とする場合
その条件式は、スカラ型に限られます
条件式が真であると言うのは、条件式が0以外であることを言います

スカラ型には、整数型、浮動小数点型、文字型、ポインタ型があります

条件式として、使われる限り、整数だろうと浮動小数点だろうとポインタだろうと0以外であれば真です
そして、条件式にintやfloat等を利用することは合法です(floatをif文に使うのはどうかとは思うけどね)
390デフォルトの名無しさん:2007/10/30(火) 22:36:05
>>384
あってねーよ
391デフォルトの名無しさん:2007/10/30(火) 22:37:17
>>381
両者とも0か1を返すよ。
392デフォルトの名無しさん:2007/10/30(火) 22:38:00
>>382
とりあえず、<&;の戻り値に真偽の意味は含まれないって言う意見は異端過ぎるんじゃね?
反論に使う材料間違ってると思うよ。
393デフォルトの名無しさん:2007/10/30(火) 22:38:39
>>386
いや、そんな馬鹿は一人いれば十分だろ。
394デフォルトの名無しさん:2007/10/30(火) 22:38:56
>>382
なぜ「あえて」そう書いてあるかというと、
C言語が意味の上での真偽値を整数で代用する言語だから。
意味の上での真偽値は、いつでもどこでも整数値に格下げすることが出来る。
どこの段階で意味の上での真偽値が整数値に格下げされるか判らないから、
最初にzeroやnonzeroを生み出すところ以外には、
規格書には「0と比較します」としか書き様が無い。

最初にzeroやnonzeroを生み出すところの例は >>34
それから、関数の戻り値の定義で「true を 返します」ってのもある。
395デフォルトの名無しさん:2007/10/30(火) 22:39:40
>>381
「nonzeroを返す」と書かれてるよ
396392:2007/10/30(火) 22:40:15
ミスった。<な。
397デフォルトの名無しさん:2007/10/30(火) 22:41:40
>>388
だけど、ヘタだよね
398デフォルトの名無しさん:2007/10/30(火) 22:43:48
>>393
最低2人って書いた理由くらい分かれよw
馬鹿が2人も居るのか、みたいなレスなら分かるけどw
399デフォルトの名無しさん:2007/10/30(火) 22:45:03
>>389
ISO/IEC 9899:TC2 のどこに載ってる?

>>391
ではどうして1を返すって書かずにわざわざtrueを返すって書くんだ?
これは意味の上でのtrueが市民権を得てるってことだろ。
なんせ仕様書に出てくるんだからな。
400デフォルトの名無しさん:2007/10/30(火) 22:45:38
>>395
ISO/IEC 9899:1999 (E)だよね?
スマンけど教えてくれ。
401デフォルトの名無しさん:2007/10/30(火) 22:45:49
>>371
なるほど。
論理演算の結果や、真偽値として期待される整数さえも、
ifの条件においては、いずれもまた整数である、と。
402デフォルトの名無しさん:2007/10/30(火) 22:46:25
>>395
どこよ
403デフォルトの名無しさん:2007/10/30(火) 22:47:20
ちょ、ちょっと待って、なんでこんな急に加速してるの…?
404デフォルトの名無しさん:2007/10/30(火) 22:48:52
>>400
ISO/IEC 9899:TC2だよ
405デフォルトの名無しさん:2007/10/30(火) 22:49:01
>>403
ここ数日は、定数左、!strcmp、nonzero云々でお祭り騒ぎです。
406デフォルトの名無しさん:2007/10/30(火) 22:50:11
>>400
7.4.1
407デフォルトの名無しさん:2007/10/30(火) 22:50:56
>>401
意味の上での論理値は、いつでもどこでも整数値に格下げできる。
意味の上での論理値を、整数に格下げせず、
意味の上での論理値のままなるべく扱うのはプログラマの責任という。

逆に、整数値を論理値の意味で見なすのは、これはダウンキャストをしているわけだから、
いつでも正しいとは言いがたい。
408デフォルトの名無しさん:2007/10/30(火) 22:52:19
>>403
元気で噛み合って無い2人が出会ったら祭勃発ですからw
409デフォルトの名無しさん:2007/10/30(火) 22:54:03
>>406

return nonzero (true)

と書いてありますが。
nonzero ですけど、true の意味ですよ ってことでしょ。
nonzero と true が真に等価なら、一々但し書きなんてしないよなぁ。
410デフォルトの名無しさん:2007/10/30(火) 22:55:40
被害担当艦age

>>407
C言語において、整数の 1 や 2 の真偽を問う必要性が無い。
!は真偽値を扱いたいという素直な表れでは?
BであればAであるとは限らない、ということを理解すべき。
真で無い物はzeroだけなんだよ
negative も 数学的な意味で出てきたのでしょう。
411デフォルトの名無しさん:2007/10/30(火) 22:56:40
>>399
ISO/IEC, Programming Languages -- C, 9899:1999, amended by ISO/IEC 9899:1999/Cor.1:2001

「真は0以外」なのだから、「1」と書くわけは無い、あくまでも、「true」もしくは「nonzero」
「1」は真であっても、真は「1」では無い
412デフォルトの名無しさん:2007/10/30(火) 22:58:44
被害担当艦age

>>410
あなたの理屈で言うと、int i = 0;以外は、0以外であるが真では無いので、コンパイルされてはおかしいのでは無いでしょうか?
ifでの分岐の作動原理に、真偽がどうの、を期待するのが気に食わないと?
「nonzero → non true 」 を証明するの?
だから、それを証明してくれよ
c言語のint型の返り値の型の関数でさ、
413デフォルトの名無しさん:2007/10/30(火) 22:59:21
>>356見てくれ。
c++最強とか言うつもり無いけど、あちらでは比較演算子はbool型に入る。
でもintからの暗黙のキャストは出来ない。
boolについてc++の方向性は分かるよな?
話題はcだけど、c++の考え方を指標にするのも悪くないだろ。
414デフォルトの名無しさん:2007/10/30(火) 22:59:38
>>404
ISO/IEC 9899:1999/Cor.2:2004(E)見てみたけど
どこにあるかわからなかった。

>>406
なんでここでctype?
415デフォルトの名無しさん:2007/10/30(火) 23:00:12
つまり、前スレの80と386の最低二人はバカがいるってことね。
でも、なんとなく同一人物っぽいんだよな。
416デフォルトの名無しさん:2007/10/30(火) 23:00:33
暗黙キャスト出来ないは言い過ぎか、推奨されない、かな。
417デフォルトの名無しさん:2007/10/30(火) 23:02:06
>>411
でも関数の仕様上、1を返すことに決まってるなら、そう書けばよいだろ。
もしくは、非0を返すと書くか。

あえて、true を返すと記述するってことは、
true に意味があるってことだろ。
418デフォルトの名無しさん:2007/10/30(火) 23:06:55
>>415
そういうこと。
ちなみに俺はnonzeroという単語を使って無い。
そして>>200とか>>369が俺。
相手を本気でアホとは思ってないよw
もうちょっと気楽に話そうぜw
419デフォルトの名無しさん:2007/10/30(火) 23:07:16
・nonzeroを返す
・trueを返す
規格書では何か意図があって使い分けてると考えてる?
420デフォルトの名無しさん:2007/10/30(火) 23:07:57
ちょっとC++の話が出てきたが、要は言いたいことはこういうことだよ。

typedef int bool;
ではなく、

class bool : public int {}; //←本当は出来ない。あくまで擬似コード。
だと。

bool は int だが、 int は 必ずしも bool でない。
421デフォルトの名無しさん:2007/10/30(火) 23:09:21
>>419
だから、nonzero を返すと書いてあるところを示せよ。
俺の見たところには、nonzero ( true ) と但し書きがあったぞ。

ちなみに、strcmp の戻り値は integer だと 書いてあった。
422デフォルトの名無しさん:2007/10/30(火) 23:12:28
>>421
その但し書きはnonzeroがtrueだって事。
423デフォルトの名無しさん:2007/10/30(火) 23:23:31
>>422
それは、
この関数の戻り値の nonzero は 限定的に true を意味しています、って但し書きでしかない。
つまり、一般的に「nonzero → true」 ということが言えないから、わざわざ但し書きが着いてる。
ということは、「nonzero → true」 は一般的には言えないってこと。

一方、trueの方は、何の但し書きもなく「true」だけ単体で出てくることが多い。
つまり、「true → nozero」 は一般的に言えることだから、但し書きがついてない。
424デフォルトの名無しさん:2007/10/30(火) 23:24:44
>>423
trueに但し書きついてるよ
425デフォルトの名無しさん:2007/10/30(火) 23:26:15
>>424
>「true」だけ単体で出てくることが多い。
とわざわざ書いてるだろ。
426デフォルトの名無しさん:2007/10/30(火) 23:26:20
>>423
trueは但し書きがついている場合にnonzeroということ。
427デフォルトの名無しさん:2007/10/30(火) 23:30:06
>>426
では、但し書きのついてない true は何ですか?
428デフォルトの名無しさん:2007/10/30(火) 23:31:10
真偽値のtrueの事
429デフォルトの名無しさん:2007/10/30(火) 23:32:15
お前ら、「但し書き」って書きすぎ。
430デフォルトの名無しさん:2007/10/30(火) 23:32:36
>>428
C言語に真偽値はありません。
なにより、戻り値の型はintになってますよ。
trueを返すとは、一体どういうことなのでしょうね。
但し書きが無いということは、なにか暗黙の了解でもあるのかな?
431デフォルトの名無しさん:2007/10/30(火) 23:37:58
上の真偽値とはプログラミング一般における真偽値の事。
432デフォルトの名無しさん:2007/10/30(火) 23:38:37
>>430
if、while、for、do〜whileに用いる条件式に於いてtrueであることが保証される
if、while、for、do〜whileに用いる条件式に於いて、trueとはnonzeroである
その条件式は、スカラ型に限られる
スカラ型には、整数型、浮動小数点型、文字型、ポインタ型がある
433デフォルトの名無しさん:2007/10/30(火) 23:41:07
>>432
> if、while、for、do〜whileに用いる条件式に於いてtrueであることが保証される
意味不明
434デフォルトの名無しさん:2007/10/30(火) 23:42:55
たって数人でここまで進めるとはね…伊達に毎日キーボード叩いてないってことか
435デフォルトの名無しさん:2007/10/30(火) 23:44:15
毎日ではないな
436デフォルトの名無しさん:2007/10/30(火) 23:46:00
>>431
でも、関数の戻り値はintになってるんだよ。
その上で、なんの説明も無く、「trueが返る」とシレっと書いてあるわけだから、
trueがnonzeroであるということが一般的だということだろ。
437デフォルトの名無しさん:2007/10/30(火) 23:48:56
そもそもスレ違い。
Cだけの話ならISO Cのスレがあるだろ。
438デフォルトの名無しさん:2007/10/30(火) 23:48:59
なんで400レスにもわたってこんなこと話してるんだ?
MSみたいにBOOLとか定義しとけば済む話じゃないか。

ヘタとか以前に、もっと考えることあるだろう。
439デフォルトの名無しさん:2007/10/30(火) 23:49:15
trueはint型。
440デフォルトの名無しさん:2007/10/30(火) 23:51:12
>>438
ISO Cのスレで聞け。
答えが聞ける。
441デフォルトの名無しさん:2007/10/30(火) 23:52:04
お前らほんと定義好きなw
ヘタかどうかの話に立ち戻る気は無いの?

上の方でもあったけど、算術演算子は数値を意図するものに、
論理演算子は真偽値を意図するものに。
それを破ると分かり辛い、つまりヘタなソースになる。
というのは異論無いっしょ?

例えばc++ではオペレータオーバーロード絡みやイテレータの概念など、
1を返す・非0を返すなどより、もっと概念的な意図をコーディングする方向に進んでいる。
442デフォルトの名無しさん:2007/10/30(火) 23:53:32
>>432
どこにそんな頭の悪そうな文章が書いてあったのか知らないが、

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.

と書いてあるぞ。
443デフォルトの名無しさん:2007/10/30(火) 23:53:44
>>441
たとえばC++が出てくる辺り「悪食だな」と思う
444デフォルトの名無しさん:2007/10/30(火) 23:57:11
CとC++のコードはぱっと見て「ヘタだなぁ」と思うコード
445デフォルトの名無しさん:2007/10/30(火) 23:58:56
>算術演算子は数値を意図するものに

field
446デフォルトの名無しさん:2007/10/31(水) 00:01:55
>>442
ということは

while (strcmp(s1,s2))
{
}

は正しいわけか。
なんかぐだぐだ感。
447デフォルトの名無しさん:2007/10/31(水) 00:04:18
>>443
食わず嫌いは良くないぜ。
PHPやJavaも好きだけど、特定端末用のActiveX作るときとか
C++ATLマジオヌヌメだから。
最近は.NET使えるからC#でも良いけど。
448デフォルトの名無しさん:2007/10/31(水) 00:05:21
>>446
それが正しいということは、一人を除いてみんな知っているわけで。
ただ一人だけが喚いて、暴れて、集中砲火を浴びて、発狂しているだけです。
で、その結果として1日でスレが半分埋まるわけだw
449デフォルトの名無しさん:2007/10/31(水) 00:06:24
なんだかスレが落ち着いてきてるような?
450デフォルトの名無しさん:2007/10/31(水) 00:08:27
ちなみにその一人というのはニートで性格が悪いです
ニートなので一晩中でも相手してくれますよ
451デフォルトの名無しさん:2007/10/31(水) 00:09:27
誰か結論まとめてくれる?
452デフォルトの名無しさん:2007/10/31(水) 00:10:01
一人が、とか、喚いて、とか言い出すことの恥ずかしさに気付いて下さい・・・。
453デフォルトの名無しさん:2007/10/31(水) 00:11:24
恥ずかしさに結びつける意味が分かりません
454デフォルトの名無しさん:2007/10/31(水) 00:18:41
きっと、「いわれ方が」恥ずかしいってことだと思うよ。
ただ、あやつにそのような恥を感じるルーチンが実装されているとは思えないけど。
455デフォルトの名無しさん:2007/10/31(水) 00:19:22
>>453
「上から目線」に立ちたい人の定番だからね。
でも本当の意味で上の目線になれる人間は、そのような人格批判はしないよ。
456デフォルトの名無しさん:2007/10/31(水) 00:20:08
どうせ自己愛性人格障害だよ奴は

・御都合主義的な白昼夢に耽る。
・自分のことにしか関心がない。
・高慢で横柄な態度。
・特別な人間であると思っている。
・自分は特別な人間にしか理解されないと思っている。
・冷淡で、他人を利用しようとする。
・批判に対して過剰に反応する。
・虚栄心から、嘘をつきやすい。
・有名人の追っかけ。
・宗教の熱烈な信者。
457デフォルトの名無しさん:2007/10/31(水) 00:21:40
bool値以外でif(!p)とかやってるのは確かに下手糞だな。
458デフォルトの名無しさん:2007/10/31(水) 00:23:04
仕様書を持っていないんだけど、
! 演算子は true/false を受け取るものなの?
それとも単に条件式と同様に
!x は x が 0 ならば 0 以外となり x が 0 以外ならば 0 となる
などと定義されているだけなの?

strcmp の話は !strcmp(s1,s2) と書くことが意味的にどうかって話なので
結局は ! 演算子に渡すべき値が true/false の代用としての int なのか
単なる int なのかっていう話だと思うんだけど。
459デフォルトの名無しさん:2007/10/31(水) 00:25:29
・文法的に合っている(コンパイルエラーは出ない)
・書き手の意図通りに動く
・一般的なプログラマーならきちんと書き手の意図を読み取れる
であるのにヘタなのか?
460デフォルトの名無しさん:2007/10/31(水) 00:25:47
結局話しはズレたまま中傷フェーズに移っちゃったの?
461デフォルトの名無しさん:2007/10/31(水) 00:25:51
>>458
非ゼロ -> 0
0 -> 1
って仕様
462デフォルトの名無しさん:2007/10/31(水) 00:26:57
>>460
移ってないんじゃない?
463デフォルトの名無しさん:2007/10/31(水) 00:26:58
>>461
それが本当なら !strcmp(s1,s2) は何もおかしくないってことで結論出てる?
464デフォルトの名無しさん:2007/10/31(水) 00:27:15
お前らほんとおもしろいな
465デフォルトの名無しさん:2007/10/31(水) 00:27:24
>>446
Cの定義上
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言語が高級アセンブラといわれる所以。そう見えるように書いてあげないと、それらしくならない言語。
466デフォルトの名無しさん:2007/10/31(水) 00:28:36
>>459
規格で未定義な事を書けばヘタって言われるみたいよ
467デフォルトの名無しさん:2007/10/31(水) 00:28:48
>>445
あれ?違った?
文脈的に複素数とか圏とかの話じゃないよね?
468デフォルトの名無しさん:2007/10/31(水) 00:29:38
結局>>353がほぐれる事はなかったのね。
469デフォルトの名無しさん:2007/10/31(水) 00:30:25
汚いだとか主観的な事持ち出されてもなあ
470デフォルトの名無しさん:2007/10/31(水) 00:30:37
>>465
そういう主義主張は興味ないです。

てか、「C が」そういう主義主張を持っているなら、
最初から

0 は false である。
0 以外は true である。
と定義して、if (exp) {} は exp が true の場合には…、と書いているはず。

そう書いていないということは、
C の仕様からは特にそういう主義主張は読み取れない

ということだと思うんだけど。
471デフォルトの名無しさん:2007/10/31(水) 00:31:02
>>458
> ! 演算子は true/false を受け取るものなの?
数を渡すことになってる。
だけど、論理値を渡されることを期待されてる。
それをそう見えるように記述しないと、それらしくならない言語だから。
定義で許されることを全部許すと、節操無しの無茶苦茶になる。
高級アセンブラだからしかたない。書くほうが気をつけないと。
472デフォルトの名無しさん:2007/10/31(水) 00:32:24
>>463
文法上はおかしくないってだけの話だよ。
!strcmpはコンパイルとおるし、文法上おかいいはずなんて無いでしょ。
ヘタなコードだって、コンパイルぐらいは通る。
473デフォルトの名無しさん:2007/10/31(水) 00:32:28
>>459
読み取り「易さ」の話ね。読めないって言う人はこのスレには居ないだろうし。
あとコンパイルエラーとか未定義動作とか、ヘタとかいう次元じゃ無いと思う。
474デフォルトの名無しさん:2007/10/31(水) 00:32:45
>>465
exp は nonzeroである。ていうのは 
exp == nozero が真て事であり、
exp != 0が真て事でしょ?
そういう意味のtrueだと言っているのだと思うけど?
475デフォルトの名無しさん:2007/10/31(水) 00:33:36
>>471
そう見えるように記述してあげることで、
「C を知らない人にも」それらしく見えるようになる。

という主張なら同意。
476デフォルトの名無しさん:2007/10/31(水) 00:36:14
>>469
スレタイ的には主観も含むんじゃね?個人差ありきで。
綺麗さってそれなりに大事だよ。ある程度指標になる。
最優先じゃないけどね。
477デフォルトの名無しさん:2007/10/31(水) 00:36:42
つまり C で
 if (x != 0) { ... }
と書くのは
他の言語で
 if (b == true) { ... }
と書くのと同じってことだね。
478459:2007/10/31(水) 00:37:32
「if(!strcmp(s1,s2))がヘタであること」を証明するのに、延々議論してきた様ですが、
このコードが書き手の意図通り動作(s1とs2が等しいか否かで分岐)する/しないを
証明できれば、結論は直ぐに出る気がするのだが。

#場当たり的対応でスレを伸ばすような輩が書くコードなんて高が知れてる希ガス
479デフォルトの名無しさん:2007/10/31(水) 00:37:38
>>470
> 0 は false である。
> 0 以外は true である。

そっち方向には定義されてないが、
true が nonzero であることは、暗黙の了解です。
C言語の仕様書にも何の注釈も無くばんばん出てきます。

つまり、C言語にも意味の上での真偽値はある。
ただ、機能として持ってないだけ。

>if (exp) {} は exp が true の場合には…
と仕様書に書けなかったのは、真偽値を整数値で代用してしまったため。
480デフォルトの名無しさん:2007/10/31(水) 00:37:45
>>476
うん
書いてからそれは思った
481デフォルトの名無しさん:2007/10/31(水) 00:39:18
>>459 は必要条件であって十分条件ではないと思うが。

コピペで量産したコードだって >>459 の 3 条件は余裕で満たすわけだし。
482デフォルトの名無しさん:2007/10/31(水) 00:39:28
>>479
暗黙の了解ではありませんよ。
483デフォルトの名無しさん:2007/10/31(水) 00:40:56
>>477
勝手に同じだと思ってればいいんじゃなかろうか
484デフォルトの名無しさん:2007/10/31(水) 00:41:31
>>478
>このコードが書き手の意図通り動作する/しないを
今まで何のレスを読んできたんだよ・・・。
gotoやグローバル変数も書き手の意図通り動作するよ。

そういう話じゃないだろ?
485デフォルトの名無しさん:2007/10/31(水) 00:41:53
>>474
仕様書よめ。
式を取って、その式の値が0かどうかで分岐すると書いてある。
真偽は関係ない。
まるで真偽値を取っているかのように見せかけるのはプログラマの仕事。
Cは高級アセンブラだから、書く側がそれらしく工夫しないと、それらしくは見えない。
「文法上こう書けるから、これはこういう意味だよね」は通用しない。
int i; char *p;
i [ p ] ;
と書けちゃう言語だということをお忘れなく。
486デフォルトの名無しさん:2007/10/31(水) 00:42:55
>>465
ifの中身を真偽に見せかけたかったら、それっぽく見せかけるのはたしかにPGの仕事だ
でも別に必ずしも真偽にする必要はないだろ
本来ほしい条件は真偽ではなく有無の場合ってのは多々ある
この場合if(p)とはif(!p)のほうがそれっぽく見える表現だと思うよ
487デフォルトの名無しさん:2007/10/31(水) 00:43:05
>>474
しかし、仕様書にtrueやfalseといった、本来C言語に必要ない概念が出てくることもお忘れなく。
488デフォルトの名無しさん:2007/10/31(水) 00:45:29
>>478
書き手の意図どおりに動作するかどうかは問題ではない。
どんなにヘタなコードでも、書き手の意図どおりに動作する。
489デフォルトの名無しさん:2007/10/31(水) 00:46:59
>仕様書よめ。
>式を取って、その式の値が0かどうかで分岐すると書いてある。
>真偽は関係ない。

ここまで同意.


整数値と真偽値を文脈に応じて読み替えるのはプログラマの仕事。
Cは高級アセンブラだから、読む側が経験を積まないと、書き手の意図は読み取れない。
「if だから、条件式は真偽値だよね」は通用しない。
if (!strcmp(s1, s2)) {}
と書いて構わない仕様だといういうことをお忘れなく。


とも言えるわけで。
平行線だと思います。
490デフォルトの名無しさん:2007/10/31(水) 00:49:27
>>486
ポインタの場合は特殊だと、前にも書いたが・・・。
値が 0 のポインタには特殊な意味があるから、例外的に if( !p )と書いてもいいのではないかと思う。
しかしながら、整数の 0 には特別な意味は無いので、
if ( !i ){ } などとするのは汚いだろうと。
491デフォルトの名無しさん:2007/10/31(水) 00:50:51
>>489
でもその考え方だとforじゃなくてgotoでも良くね?ってことにもなりかねないよ。
492デフォルトの名無しさん:2007/10/31(水) 00:51:28
>>489
もちろん書いても構わない。だけど、汚いねというだけ。
C言語にも、意味の上での真偽はある。機能が無いだけで。
493デフォルトの名無しさん:2007/10/31(水) 00:51:29
C言語は、if (exp)のexpが0か非0かを判断する言語。
expをtrue/falseに見せかけるなんてのは、Cを理解していない初心者がすること。
expがtrue/falseであると見せかけて分かりやすくしたつもりになっても、結局はよく分かっていない初心者を作り出しているに過ぎない。

何回も言われているのに、なんで一向に理解してくれないんだろう。
494デフォルトの名無しさん:2007/10/31(水) 00:52:29
>>493
それはお前が人格障害者だから
495デフォルトの名無しさん:2007/10/31(水) 00:53:45
>>490
そういう主張ってのは、
自分の能力と共に示さないと周囲は納得しないので、
2ch向きじゃないね。

たとえば、あなたが優秀なプログラマで(それをオープンソースか何かで世間に堂々と証明できて)
自分の能力の証明と共にブログか何かで主張すれば、世間はついてくると思う。

でも、2ch ではそういう主張は説得力を持たないんだよね。
根拠のある事実を納得させることは 2ch でもできるけど、
自分の「思想」を匿名で広めるのは無理。
496デフォルトの名無しさん:2007/10/31(水) 00:54:49
>>493
仕様書を読んでください。
C言語にも、意味の上での真偽の概念があるということがわかります。
関数の戻り値がtrueだとかそうじゃないとか、普通に出てきます。
一々非0とは書かない。意味の上での真偽はあるということ。
仕様書レベルで出てくるということ。
497デフォルトの名無しさん:2007/10/31(水) 00:56:51
>>491
どうして?
498デフォルトの名無しさん:2007/10/31(水) 00:56:55
>481,484
「コピペで量産した」からと言って下手ではないし、
「コピペで量産した」「>459の条件を満たす」下手なコードが
下手たる条件は「冗長」だと思うけど、if(!strcmp))はそれを満たすかな?
gotoやグローバル変数が下手な理由も同様だと思うけど。

>488
書き手の意図通りに動作しないコードは明らかにヘタです。
従って問題です。
499デフォルトの名無しさん:2007/10/31(水) 00:58:35
>>498
>書き手の意図通りに動作しないコードは明らかにヘタです。
>従って問題です。
今は問題じゃ無いという意味。
500デフォルトの名無しさん:2007/10/31(水) 00:58:38
>>490
じゃあfopenの結果のif(fp)はよくてopenの結果のif(fd)はだめなのかい?
0に特別な意味は無いって言うけど
インドの方向を見ながら0の概念を今一度思い起こしてみようよ
501デフォルトの名無しさん:2007/10/31(水) 00:59:12
ここまで俺の自作自演
502デフォルトの名無しさん:2007/10/31(水) 00:59:25
感覚的に、C言語のソースの上に、
ある程度言語に依存しないロジックの層が有って、
その上に仕様書、さらに製品としての戦略・強み、みたいなのがあるとして、

ロジックの層を出来るだけ「C言語にコンパイル」せずにソースにしたいという感覚。
ソースからロジックの意図が見えてくる感じのね。
503デフォルトの名無しさん:2007/10/31(水) 01:02:19
>>502
だったらJavaにでも転身すれば?
C言語は「高級アセンブラ」という異名があるほど
ハードウェアと密着している
504デフォルトの名無しさん:2007/10/31(水) 01:02:41
>>502 にロジックは作ってほしくない
505デフォルトの名無しさん:2007/10/31(水) 01:03:18
>>497
「for だから、ループだよね」は通用しない。
gotoで書いても動作に問題は無いよ。
506デフォルトの名無しさん:2007/10/31(水) 01:03:57
goto は構造化を壊すのでコンパイラの最適化を阻害します。
507デフォルトの名無しさん:2007/10/31(水) 01:04:56
>>500
>open
俺は 0 と比較するが。

それから、数値としての 0 になにか特別な重みがあったりはしない。
無いという概念に特別な重みを設けないで済むように、数値としての 0 が発明された。
むしろ、 0 が特別であっては困る。
508デフォルトの名無しさん:2007/10/31(水) 01:05:49
ポインタの時はなんで比較しないの?
509デフォルトの名無しさん:2007/10/31(水) 01:06:16
>>505
>「for だから、ループだよね」は通用しない。
for は ループだと定義してある。
510500:2007/10/31(水) 01:06:27
ってごめんopenじゃだめだった orz
511デフォルトの名無しさん:2007/10/31(水) 01:07:12
>>508
値が 0 のポインタは特別な値として定義してあるから。
一方、整数の 0 は特別な値ではない。
512デフォルトの名無しさん:2007/10/31(水) 01:07:47
C言語ではポインタ値はNULLと比較するな
513デフォルトの名無しさん:2007/10/31(水) 01:07:49
>>507
多くのCPUにとって0は特別
Cを使うならそれを意識して当然
514デフォルトの名無しさん:2007/10/31(水) 01:07:55
>>510
いまさらそんな・・・
515デフォルトの名無しさん:2007/10/31(水) 01:08:14
>>503
Javaもやってるし最近はWindowsCE用で非接触カードデバイス制御とかやってるし。

>>504
OFFでも無い限り偶然でもまず会うこと無いだろ。
それにしてもその程度のレスで能力を見切る目の鋭さは異常w
516デフォルトの名無しさん:2007/10/31(水) 01:09:16
>>513
それはあくまでCPUの都合だろ。
今時そんなコード書いてるようじゃ、ヘタだね。
ループも全部ダウンカウンタで書いてるの?
517デフォルトの名無しさん:2007/10/31(水) 01:09:58
ぬるぽチェックはNULLと比較しない派
518デフォルトの名無しさん:2007/10/31(水) 01:10:40
>>517
ポインタの 0 は特別な値だからね。
519デフォルトの名無しさん:2007/10/31(水) 01:11:12
仕様から解釈する限り結論が出てるからな。
ここから先は結論に納得できない奴が火病を起こすだけっぽい。撤退撤退。
520デフォルトの名無しさん:2007/10/31(水) 01:13:03
俺は普通にこう書くけど。

if ((fp = fopen(fname, "r")) != NULL)
{
}
521デフォルトの名無しさん:2007/10/31(水) 01:13:22
・strcmp(s1,s2)はs1とs2が等しければ0を返す。
・!は 非0を与えたら0、0を与えたら1 という結果を返す演算子である。
・従って if(!strcmp(s1,s2)) と書けば、s1とs2が等しい時のみ
 関連するステートメントが実行される。

ここまでにツッコミを入れる余地は無いと思う。
だがこの書き方が否定されるべき理由が1つだけある。
「!」の存在により、逆条件で実行されてしまうように錯覚してしまう恐れがあるのだ。
たったこれだけの事だが、本当に上手い書き方ならばこうした錯覚も回避できる。
そう、if(strcmp(s1,s2)==0) と書けば良い。
522デフォルトの名無しさん:2007/10/31(水) 01:13:22
>>520
俺も
523デフォルトの名無しさん:2007/10/31(水) 01:14:25
>>516
> >>513
> それはあくまでCPUの都合だろ。
> 今時そんなコード書いてるようじゃ、ヘタだね。

CはCPUの都合に合わせて設計されてるだろ?
今時も何もない。
Cを使うということはそういうことだ。

> ループも全部ダウンカウンタで書いてるの?

パフォーマンスが命の仕事してるからそういうこともしたね。
今はPPC使ってるのでその必要はほぼないけどな。


524デフォルトの名無しさん:2007/10/31(水) 01:15:33
>>521
どう書いても馬鹿は錯覚するので
読み手のレベルを想定しながら書くだけ。

言語ごとに言えば、俺がコードを書く時に暗黙に想定する読み手のレベルは
C > Java > VB
525デフォルトの名無しさん:2007/10/31(水) 01:15:36
>>519
最初から見やすさのみの問題だったのに
仕様として定義されているから…とか変なこと言う奴が帰っていって
元の流れに戻りつつある感じだよ
526デフォルトの名無しさん:2007/10/31(水) 01:15:38
>>519
ノシ
527デフォルトの名無しさん:2007/10/31(水) 01:16:08
左辺定数君の主張の意味がようやく判った!

6.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では無いと言い張り現在に至る

主張を通したいなら、その裏づけは誤解を受けないようにしなければならないと言う良い例だな
また、左辺に定数を置く奴はへそ曲りであるという証明でもあるかも知れない
528デフォルトの名無しさん:2007/10/31(水) 01:18:39
>>523
今はしないのなら、
今時、0 を意識したコード書いてたらヘタってことだろ。
529デフォルトの名無しさん:2007/10/31(水) 01:19:09
>>527
深夜1時にしてこの釣り方はヤベェw
530デフォルトの名無しさん:2007/10/31(水) 01:22:10
>>527

>strcmpの返す値は符号だから論理値として処理してもおかしくないだろう反論される
>それは違うと反論するも、
>コードを走らせたら、実行ファイルを作ったコンパイラにより、結果はバラバラになってしまう
>(1か-1か0を返す物があれば、s1-s2を返す物がある)
>しょうがないからnonzeroはtrueでは無いと言い張り現在に至る

この流れが判らないのだが。0より大きい「数」を返す、といったとき、
返ってくる値は1でも2でも3でも構わないのだが。
531デフォルトの名無しさん:2007/10/31(水) 01:23:35
>>493
しかし、ここまで集中砲火を浴びながら自分を省みない自信というか無謀というか世間知らずは凄いな。
まるで、亀父をみているようだ。
532デフォルトの名無しさん:2007/10/31(水) 01:25:15
この板にID表示機能がほしいと思ったのは初めてだよw
533デフォルトの名無しさん:2007/10/31(水) 01:26:04
それから、符号を返すって何よ。

#define STRCMP_PLUS 1
#define STRCMP_ZERO 2
#define STRCMP_MUINUS 3

どこかでとか定義してあって、
まるでそれらの値を返すかのように聞こえる。

整数の符号として返す、が正しい日本語では?
まぁ、整数の符号として返す、ということは、整数を返すということなんだけど。
534デフォルトの名無しさん:2007/10/31(水) 01:26:52
>>531
ちなみに、
>>493
は いつもの人 ではないよ。
535デフォルトの名無しさん:2007/10/31(水) 01:27:59
>532
そう思うならコテ付ければ。
奴が付けなくても皆が付ければ分かる。
536デフォルトの名無しさん:2007/10/31(水) 01:30:20
いつもの人は明け方3時過ぎに活動を開始するみたいだね。
早起きなのか昼夜が逆転しているのか。。。
537OO ◆sqaw1gGOfo :2007/10/31(水) 01:30:51
>>446
while (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で数学を語るのは馬鹿。
538デフォルトの名無しさん:2007/10/31(水) 01:31:23
>>536
昼夜逆転か。ニートだけじゃなくて精神病も発病してるんじゃね?w
539デフォルトの名無しさん:2007/10/31(水) 01:33:01
いつもの人だけど、やっぱコテは無視するよな。
俺コテつけるの止めるわ。
540デフォルトの名無しさん:2007/10/31(水) 01:34:44
>>528

PPCだからする必要がないと言っただけ。
しかもそれはお前が言ったループの最適化の話。

N個配列の有効なindexは0からN-1まで
正常終了の終了コードは0
.bbsは0で初期化

Cやるなら0は特別であることを意識せざるをえない
541デフォルトの名無しさん:2007/10/31(水) 01:36:57
>>530
そうだよ、strcmpは0か、0より大きいか、0より小さい数であれば返す数が幾つだろうと関係ない
しかし、彼にとってそれは問題じゃなく、not演算子で比較することが問題だったわけだ
にもかかわらず、論理値なんて定義されていないと、自分の主張とは全然関係ない方向に自分から足を突っ込んだからさあ大変
いつまでも、誰にも、理解してもらえ無いことになるわけだな

ちょっとだけだからと気軽に借りた10万円、複利複利で気がつけば1000万!もう分けわかんね!
ってのが彼の心境かもしれん
542デフォルトの名無しさん:2007/10/31(水) 01:37:44
>>539
お、今日は出番が早いね。
せっかくコテにしたんだから、しばらく付けておいてくれよ。
俺、あんたのファンなんだけど、コテがついてると発言を追いやすくて助かるよ。
543デフォルトの名無しさん:2007/10/31(水) 01:39:17

.bss
544EAOcf-403p135.ppp15.odn.ne.jp:2007/10/31(水) 01:39:18
自宅からならフシアナも手っ取り早いよw
545デフォルトの名無しさん:2007/10/31(水) 01:40:09
あ、可変IPだと駄目か。やっぱコテだな。
546デフォルトの名無しさん:2007/10/31(水) 01:41:55
> そうだよ、strcmpは0か、0より大きいか、0より小さい数であれば返す数が幾つだろうと関係ない
> しかし、彼にとってそれは問題じゃなく、not演算子で比較することが問題だったわけだ

だから初めから 数 を返すんだから 数 と比較しろよ と書いてただろ。
それを、strcmpは符号を返すとか分けの判らないことを言い出すやつが居てだな。
547デフォルトの名無しさん:2007/10/31(水) 01:44:04
>>527
>not演算子は、規格書で(0==E)と規定されているのだから、右辺定数を使うなら、not演算子を使うのはおかしい
なるほど。それなら一応筋が通っている。
しかしそれでは、以下のようなマクロも定義してはいけないのではないか?

#define list_for_each(top, entry) \
for (entry = top; NULL != entry; entry = entry->next)

list_for_each(top, p) {
/*...*.
}
548OO ◆sqaw1gGOfo :2007/10/31(水) 01:44:11
俺は今日はじめて来たけど。
このスレでの問題は、

while (strcmp(s1,s2))
{
}

の書き方の問題、じゃないのか?
549デフォルトの名無しさん:2007/10/31(水) 01:47:45
>>547
いつもの人だけど、
>>527 は彼の妄想だから勘弁して。
550デフォルトの名無しさん:2007/10/31(水) 01:48:13
>548
「ヘタかどうか」が問題です。
※ヘタであるのを証明するのに規格は不要です。
551デフォルトの名無しさん:2007/10/31(水) 01:48:19
じゃっ、いつもの人は寝るから。
552デフォルトの名無しさん:2007/10/31(水) 01:49:03
あれ?いつもの人は起きたばっかりでしょ
もう寝るの?
553525:2007/10/31(水) 01:49:23
>>548
その通りだよ、その通りだったさ・・・
554デフォルトの名無しさん:2007/10/31(水) 01:50:12
>>546
違うよ、最初から君が、not演算子の定義をISOから引っ張って来て、ISOでもこう書いてるでしょっていってれば
strcmpがどうのこうのなんて話にゃならねぇんだよ
555デフォルトの名無しさん:2007/10/31(水) 01:52:17
この流れで誰が誰だか分かってる奴はエスパーか電波?
556デフォルトの名無しさん:2007/10/31(水) 01:53:06
ヘタである証明も要らない気がしたり。

「これぱっと見ヘタじゃね?」
「下手だな」
「そうでもないよ」
「マジで?」

程度の雑談でも良いんじゃね?超既出に掛からない程度なら。
557デフォルトの名無しさん:2007/10/31(水) 01:54:15
いつもの人にしては、いつもの勢いが無いね。
流石に疲れたのかな。

>>548
if (strcmp(s1,s2)) は問題にしていなかったような。
if (!strcmp(s1,s2)) この頭の'!'に噛み付いてた。
定数左派なら、重要な'!'が最初に出てくるから、見やすいと思うんだけどな。
558デフォルトの名無しさん:2007/10/31(水) 01:56:16
>>557
いや本当にキチガイである事を悟られたくないので
名残惜しいが書かない事にしたんだろ
559デフォルトの名無しさん:2007/10/31(水) 01:57:12
俺としては、
if (strcmp(s1,s2)) → ちょっと下手
if (!strcmp(s1,s2)) → ちょっと下手
という感覚。

でもそう書くのを批判するほど嫌ってはいないってところ。
560デフォルトの名無しさん:2007/10/31(水) 02:01:00
>>559
俺はその程度の書き方はいいと思う
むしろその書き方を批判するのは頭が固い証拠
多分いつもの人は中年のオッサンだろう
561デフォルトの名無しさん:2007/10/31(水) 02:04:53
>>559
俺はむしろこっちの方が読みやすいかな
if (strcmp(s1,s2)) → s1とs2が違うとき〜
if (!strcmp(s1,s2)) → s1とs2が違わないとき〜
みたいな感じで
562デフォルトの名無しさん:2007/10/31(水) 02:06:38
>>560
左辺定数を認めようとしない、右辺定数論者に対し、ISOの定義が(0==E)なのだからnot演算子を使わず
if (strcmp(s1, s2) == 0)
と書きやがれって言いたかったんだろう
問題は、それを丁寧伝えようとしなかったことじゃね?
563デフォルトの名無しさん:2007/10/31(水) 02:08:07
>>559
K&RでCを学んだ人にとっては、どっちも当たり前の書き方なんだけどね。
564デフォルトの名無しさん:2007/10/31(水) 02:08:23
右辺定数論者は

while (*p++ = *q++);

も否定しそうだからシカトシカト
565デフォルトの名無しさん:2007/10/31(水) 02:08:45
その書き方が上手いか下手かは>521参照。
異論があるならどうぞ。
566デフォルトの名無しさん:2007/10/31(水) 02:10:15
>>560
うん、俺も許容範囲。
!=0とか付けた方が他のメンバーがアホなミスしてとばっちり食らう
確率がほんの少し下がるかもってところ。

>>561
自衛のためだよ。俺もそれでも普通に読めるけどさ、
javaとかは普通に書けるけどc言語はあまりって奴などは特に
  str cmp -> 文字列 比較 -> 同じなら多分true
っていう直感が出てバグの原因になったりするし。
567デフォルトの名無しさん:2007/10/31(水) 02:10:15
>>564
俺は右辺定数論者だが、それはOKだぞ
568デフォルトの名無しさん:2007/10/31(水) 02:10:19
>>565
だからお前のルールには従わないって決めたから。
以上。
569521=565:2007/10/31(水) 02:10:31
あー、誤解無きよう断っておくけど自分は右辺定数論者じゃなくて
>521からの飛び入りだからね。
570デフォルトの名無しさん:2007/10/31(水) 02:12:06
>>567
こういう風見鶏みたいな態度が一番ムカツクな
571デフォルトの名無しさん:2007/10/31(水) 02:13:07
if (!strcmp(s1,s2)) ではなくて、if (strcmp(s1,s2) != 0) と書く人は、どうして'!='演算子の結果を調べないんだろう。
if ((strcmp(s1,s2) != 0) == 1) としないのか不思議だ。
strcmpだと雑音が入るから、isdigitでもisalphaでもいいけど。
572デフォルトの名無しさん:2007/10/31(水) 02:14:27
>>569
どうでもいいよ
好きな事書いてなよ
読まないから
573デフォルトの名無しさん:2007/10/31(水) 02:15:53
>>569
またまたw
あの特徴のある書き方といい長文といい、実はいつもの人なんでしょw
574デフォルトの名無しさん:2007/10/31(水) 02:18:24
>>571
今までのレス読む限り、if (!strcmp(s1,s2)) 反対の人も
if ((strcmp(s1,s2) != 0) == 1) は批判するだろうし、
isdigitには直でも誰も批判しないと思う。
575OO ◆sqaw1gGOfo :2007/10/31(水) 02:20:20
左辺定数ってのは、
if (0 == strcmp(s1,s2))
の事?

これはヘタな書き方に見えるけど、
すごく目立って、うわ、っと注目できるから良コードの部類だ。
ヘタなコードはもっとひどい。
576デフォルトの名無しさん:2007/10/31(水) 02:20:36
>>564
むしろ、左辺定数論者の方がその書き方を否定するな。
実際、いつもの人はその書き方を否定していたし。

まあ、チーム開発を考えると、その書き方を当たり前に理解できるメンバーだけを集めるってのは現実的じゃないからな。
もっと分かりやすく書けというのも理解できないわけじゃない。
577デフォルトの名無しさん:2007/10/31(水) 02:21:14
>>570
左辺定数は許容できません
not演算子については、原義で定数が、右にあろうが左にあろうが、not演算子になった時点で定数は既に隠蔽化されているので、使用しても問題ないと思います
定数をわざわざ左において、誤代入を防止するよりも、not演算子を積極的に活用する方が理にかなっていると思います
578デフォルトの名無しさん:2007/10/31(水) 02:21:19
>>576
つ[プログラミング言語C]
579521:2007/10/31(水) 02:21:24
>572,573
ごめん、誰だと勘違いしているのかアンカーで示してみて。
断っておくけどISO云々の話はノータッチだよ。
580デフォルトの名無しさん:2007/10/31(水) 02:22:54
if (!strcmp(s1,s2)) 反対の理由が
戻り値のbooleanとintの区別をつけたいからなので
booleanの結果は調べなくてOK
581デフォルトの名無しさん:2007/10/31(水) 02:23:26
>>574
0かどうか調べるのに、!hogehoge()とfugafuga() == 0の二通りを使い分けるってことか
保守しにくそうなソースだな
582デフォルトの名無しさん:2007/10/31(水) 02:23:28
>>571
!, ==, !=, <, >, isXXX などで、Cでは論理値型とか無いから1とか返すけど、
プログラム一般で論理値を意味するもの返すというのは共通認識かと
583デフォルトの名無しさん:2007/10/31(水) 02:24:13
>>581
釣り?
584デフォルトの名無しさん:2007/10/31(水) 02:24:18
>>579
いいから何か書いてみなよ
読まないから
585561:2007/10/31(水) 02:25:42
>>566
でも、
str cmp -> 文字列 比較 -> 同じなら多分true -> strcmp(s1,s2)==0 はs1とs2が違うとき
って解釈されて結局同じな気がするのよ
586デフォルトの名無しさん:2007/10/31(水) 02:26:00
>>579
前スレの80でしょ。
さすがに全部調べるのは勘弁してちょ。

---------------
"== NULL"
"NULL =="
こんなの多数決で考える頭はもうちょっと働かせたほうがよい

if(変数 = NULL)

が引き起こすバグをどうやって見つけるのか考えた事がある?ない?
難しい正規表現でも作る?`NULL'以外の場合もあるよ。

それより定数を左辺にもってくる方法を身につければいいだけじゃない?

自分がグループリーダーになったとき、部下のミスを見つけられるレベルになれる?

これはただの忠告。>>72はそれでいいならいい。私に累が及ばなければどんなコーディングでも結構。
プログラミングの先生だって×は出さないだろうしなw
587521:2007/10/31(水) 02:26:27
漏れは定数の位置に関しては拘らない。
>564は人によっては意味を誤解するから否定する。
人やコンパイラ、環境によって解釈のされ方が一意ではない
書き方が上手いとは思えん。
588デフォルトの名無しさん:2007/10/31(水) 02:26:41
この速さなら言える!
589デフォルトの名無しさん:2007/10/31(水) 02:29:26
>>587
コンパイラや環境が変わっても>>564の解釈は変わりませんよwww
590デフォルトの名無しさん:2007/10/31(水) 02:30:10
>>587
>>578は目に入らなかったのかい?
お前さんCの作者にケンカ売ってんだよ
591デフォルトの名無しさん:2007/10/31(水) 02:30:28
>>582
釣れますか?
592521:2007/10/31(水) 02:31:10
>589
「人」は異なる解釈をする恐れがある。
読まないなら全部読むな。部分的に都合よく読まないのは止めれ。
593デフォルトの名無しさん:2007/10/31(水) 02:32:14
>>592
>読まないなら全部読むな。部分的に都合よく読まないのは止めれ。

いや、この言葉にも従いませんwww
594デフォルトの名無しさん:2007/10/31(水) 02:33:20
俺はif(定数==変数)と書くクセをつけようとしたが、
if(定数=変数)と間違うより、ついif(変数==定数)
と書いてしまう方が遥かに多かったので、
そういうクセをつけるのはやめた。

まぁ、そういうテクニックを身につけるより
==と書く事を身につける方がはやいだろうな。
どっちみち==と書くんだし。
595デフォルトの名無しさん:2007/10/31(水) 02:33:32
>>585
ぱっとみ真偽を返すように見えるコードと、
後者の「0と比較?」という違和感を発生させるコードでは
ミスる可能性は同じでは無いよ。

正しいかどうかは別にして↓みたいな考え。

・間違ったコードは間違って見えるようにする
http://qrl.jp/?245078
596デフォルトの名無しさん:2007/10/31(水) 02:34:42
んじゃ、これはどういう意味で書いたの?
> 人「やコンパイラ、環境」によって解釈のされ方が一意ではない
> 書き方が上手いとは思えん。
とくに「」の中ね。
>>564の話をしていて、いきなり無関係なことを言い出したのかい?
597デフォルトの名無しさん:2007/10/31(水) 02:36:29
>>591
普通そうじゃね?違う?
598521:2007/10/31(水) 02:38:39
>596
あのー、>587では>564の話だけじゃなく左右定数の話もしてるんだけど。
前者を否定しないのに後者を否定する理由が
「人やコンパイラ、環境によって解釈のされ方が一意ではない」だよ。

※すなわち前者は左右どちらだろうが解釈のされ方は(裏読みしない限り)一意だけど、
 後者は人が一意ではない読み方をする恐れがある。

頼むから変な所にだけ注目せんといて。
599デフォルトの名無しさん:2007/10/31(水) 02:39:06
>>595
真偽を返すなんてC言語を理解していない証拠。

> ここまでで、プログラマの成長の3つの段階を示した。
> 1. きれいなものと汚いものの区別がつかない。
> 2. きれいさについて表面的な考えを持っている。そのほとんどはコーディング規則に合っているかどうかというレベルだ。
> 3. コードのきたなさについて、表面的でない小さな兆候も嗅ぎつけるようになり、気になってコードを直すようになる。
> これよりもさらに高いレベルがあり、それこそ私が本当に話したいと思っているものだ。
> 4. コードを直すために汚いコードに対する嗅覚を生かせるような仕組みを、最初から作り込むようになる。

コーディングスタイルにこだわらないって人は、この1の段階の人なんだろう、きっと。
これは595に対してのコメントじゃないけど。

600デフォルトの名無しさん:2007/10/31(水) 02:41:38
>>598
頼むから「人やコンパイラ、環境」とか三つもの全く異なる概念を
一度に語らないでくれる?一つずつ話して欲しいな
601デフォルトの名無しさん:2007/10/31(水) 02:42:22
>>598
だから、前者も後者も「人」によって解釈が変わることがあるかもしれないけど、「コンパイラや環境」によっては変わらないだろ?
なのになんで、いきなり無関係なコンパイラや環境の話が出てきたのか質問しているんだよ
質問の答えをはぐらかさないで欲しいな
602デフォルトの名無しさん:2007/10/31(水) 02:42:51
>>599
> 真偽を返すなんてC言語を理解していない証拠
本気で言ってるの?
俺は"true"返すみたいなことを言ってるわけじゃないんだけど、
過去レス読んだ方が良いと思う。
603デフォルトの名無しさん:2007/10/31(水) 02:45:29
>>599
そのプログラマの成長段階ってのはCプログラマにも
当てはまるとは到底思えない
604デフォルトの名無しさん:2007/10/31(水) 02:46:57
>>65
真のプログラマは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();
605デフォルトの名無しさん:2007/10/31(水) 02:47:23
>>599
STLのライブラリの作者はどのレベルにいるのか是非お聞きしたい
606デフォルトの名無しさん:2007/10/31(水) 02:47:50
間違ったので訂正だ。

int 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();
607デフォルトの名無しさん:2007/10/31(水) 02:48:10
>>605
あのさ、今は「C」の話をしてるんでしょ?
「C++」の話はしてないよ
608デフォルトの名無しさん:2007/10/31(水) 02:53:25
>>602
C言語ではあくまでも0か非0を返すだけです。
0がFALSEで非0がTRUEと思うのは人間がそう思うだけ。
C言語では整数の0と人間がFALSEであると思う0とは区別しません。
ここまでの理解はいいよな?
で、それを踏まえて、
関数が0を返す->関数は論理値のFALSEを返す->戻り値が論理FALSEか調べる->戻り値が0か調べる
なんて遠回りをしないで、
関数が0を返す->戻り値が0か調べる
と考えた方が分かりやすいだろうって言ってるだけ。
609デフォルトの名無しさん:2007/10/31(水) 02:56:46
>598
理解できないなら読み飛ばすか、理解できるまでじっくり読むか、質問すりゃいい。

>601
>なのになんで、いきなり無関係なコンパイラや環境の話が出てきたのか質問しているんだよ
漏れの言う「誤解」や「一意ではない解釈をする」の主語が「人」だけではなく、
コンパイラも指すこと、また要因として環境も挙げられる事を明示しておきたかった。
以上。
これで良いか?
610デフォルトの名無しさん:2007/10/31(水) 02:58:39
>>607
確かに。申し訳ない。
しかしCでも
while (*p++ = *q++);
みたいな書き方ができる人はレベル高いと思うんだがどうだろう?
611デフォルトの名無しさん:2007/10/31(水) 03:00:59
>>114からここまで読みとばしたんだけど、新しいネタは出てるの?
612デフォルトの名無しさん:2007/10/31(水) 03:01:11
>>610
悪い。俺は>>599じゃないよ
そのような書き方はK&Rでも肯定してるし、積極的にマスター
すべきであるような事が書いてある

C言語ではタイプ量が少ない事が好まれる事もあるので、
わざわざ0と比較しないで ! だけで済ませる場合も多いんじゃ
ないかと邪推してみたわけ
613デフォルトの名無しさん:2007/10/31(水) 03:01:12
int sign1(int n){return n==0?0:(n<0?-1:1);}

...

// break;は単なる忘れだと思うので付ける
switch(sign1(strcmp(s1, s2))){
   case -1:
      fuga; break;
   case 0:
      hage; break;
   case 1:
      hoge; break;
}
614デフォルトの名無しさん:2007/10/31(水) 03:01:35
つまり、単に一般論を言いたかっただけか。
文章構成能力に難有りだな。
分かりやすい文章を書く能力が欠けている。

ところで、コンパイラや環境によって解釈が異なるコードってどんなのがあるんだ?
2つ3つ教えてたもれ。
615521=609:2007/10/31(水) 03:02:27
>609の>598は>600の間違い。

>610
レベルが高いからと言って上手いとは限らないと思うけど。
まぁ漏れ達から見てヘタとは言えんけど、同レベルの方々から見たら、
誰かはヘタだと思うんでは。
616デフォルトの名無しさん:2007/10/31(水) 03:02:27
>>610
そのコードが嫌われるのは
*pのサイズが、*qより小さければどうなるのって事だよ
p[3]なのにq[]="ABC"だと、オーバーフローするでしょ
617デフォルトの名無しさん:2007/10/31(水) 03:02:51
>>608
案の定nonzeroの話始めたw
もういいよw
618デフォルトの名無しさん:2007/10/31(水) 03:05:33
フォールスルーじゃなかったのか...
VBなんか嫌いだ...orz
619デフォルトの名無しさん:2007/10/31(水) 03:06:14
>>616
エラーチェックの箇所と、処理本体は分離させろって習わなかった?
処理本体の前にpとqのエラーチェックをしておけば、そんなことに悩む必要は無いよね。
620デフォルトの名無しさん:2007/10/31(水) 03:08:02
>>617
話の内容が分からなければ無理に付き合う必要は無いんですよ。
621デフォルトの名無しさん:2007/10/31(水) 03:08:23
>>619
何いってんだ?
嫌われる理由を述べただけだろ
622521:2007/10/31(水) 03:08:56
>614
>ところで、コンパイラや環境によって解釈が異なるコードってどんなのがあるんだ?

orz
623デフォルトの名無しさん:2007/10/31(水) 03:13:51
>>620
レス番2桁台から上がってることをわざわざ書いて頂かなくても
言いたいことはよ〜く分かっておりますのでw
624デフォルトの名無しさん:2007/10/31(水) 03:15:46
たとえば
unsigned int i=0;
i--;
625デフォルトの名無しさん:2007/10/31(水) 03:15:48
またもや昨日と同じ話題に逆戻りか
こいつ何を言っても難癖付けて延々と同じ所を回る話しかしないから
付き合うだけ時間の無駄だよ
626デフォルトの名無しさん:2007/10/31(水) 03:16:40
>>614
pragmaとかエンディアンとか言ってみる
627デフォルトの名無しさん:2007/10/31(水) 03:17:54
もう寝る
628デフォルトの名無しさん:2007/10/31(水) 03:21:35
動作未定義でいいなら
i=i++;
だけでも実装によって動作が違う例がある。
629585:2007/10/31(水) 03:21:55
>>595
いや、strcmpの戻り値を勝手に勝手に予測するような奴は
0との比較なんかで違和感を覚えたりはしないな!
630デフォルトの名無しさん:2007/10/31(水) 03:22:31
>>628
それは動作が違うとは言わない。何が起きてもおかしくない、と言う
631デフォルトの名無しさん:2007/10/31(水) 03:22:33
>>620
ちなみに俺は別にそれを否定してるわけじゃないからね。

あと、>>608
>0がFALSEで非0がTRUEと思うのは人間がそう思うだけ。
>...
>なんて遠回りをしないで、

規格でさえlogicalとか出てくるのに、
「人間がそう思うこと」を遠回りとバッサリ切り捨てるのは流石に凄すぎですw
どこのAIですかw
632デフォルトの名無しさん:2007/10/31(水) 03:24:26
>>608
わざわざtrueをTRUE、falseをFALSEと書いてみたりご苦労様です。
633デフォルトの名無しさん:2007/10/31(水) 03:28:23
>>629
>strcmpの戻り値を勝手に
「ifの中にそのままある」ってところを忘れずにね。

まぁメンバーがまともならどう書いても良いよ。
634デフォルトの名無しさん:2007/10/31(水) 03:33:11
明日というか今日普通に会社なのにニコ動やらこのスレやらで
3時まで起きてる俺もアレなメンバーかもなw

不毛な論争が結構楽しかったりするから困るw
おやすみ。
635521:2007/10/31(水) 03:34:19
寝る前に一つだけ>614に聞いて置きたいけど、
trueとnonzero云々を散々議論してた人と同じ人ですか?

yesと言うならスレの伸びっぷりも頷ける。
間違いなく前スレ80と並ぶ功労者に違いありませんわ。
636デフォルトの名無しさん:2007/10/31(水) 03:41:48
>>634
ばーか
不毛だから楽しいんだよ
有用な話なんて、「ふーんなるほど」で終わるだろ

おやすみ。
637OO ◆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) となる。
なんて計算はおもしろくはあるが、だからってこれがなんかプログラムに有用か?
ラムダ計算じゃ足し算も面倒なんだが。
ちなみに私はゆとりですよ。
638デフォルトの名無しさん:2007/10/31(水) 07:37:03
>>637
関数型言語のソースコードの話か、理論的なラムダ計算の話かどっちかにしろよ
639デフォルトの名無しさん:2007/10/31(水) 07:42:30
>>637
FUNARG問題
640デフォルトの名無しさん:2007/10/31(水) 08:08:25
何、結局true,falseの認識の違いを双方修正する事は出来なかったんだ。
どっちも正しいから平行線だったのに。アホだな。
641640:2007/10/31(水) 08:11:46
あ、蒸し返すつもりは無いです。スルーして下さい。スマソ。
642デフォルトの名無しさん:2007/10/31(水) 09:10:45
>>637
ラムダ計算ならペンローズ「工程の新しい心」にものってる
643デフォルトの名無しさん:2007/10/31(水) 09:27:36
>>608が前スレの80と同じと勘違いしている奴が多すぎてワロタ。
話の内容が真逆なのに。
話がループする原因が分かった気がするよw
644デフォルトの名無しさん:2007/10/31(水) 09:28:34
さすがに読む気しないんで、光の速さで500レスほどをスキップ。
645デフォルトの名無しさん:2007/10/31(水) 09:52:02
全部スキップしろよw
本来晒される側のアホグラマがなぜかこのスレで頑張ってるのがなぁ・・・
646デフォルトの名無しさん:2007/10/31(水) 10:52:00
>>575
なんだよその「犬がおしっこする事はおしっこの匂いをあたりに漂わせて
皆に犬がおしっこした事を伝えるからとてもいい事だ」みたいな意見は
647デフォルトの名無しさん:2007/10/31(水) 11:58:04
この流れを吹き飛ばすような下手なコードが出ればいいんじゃね?

例えば、boolやbooleanのある言語で、
if (exp == true) {} とする場合や、
さらに変数名が、is_visible という名前であるのにも関わらず、
if (is_visible == true) とするような場合。
648デフォルトの名無しさん:2007/10/31(水) 12:05:41
>>647
それは議論の余地が無いんじゃね?
649デフォルトの名無しさん:2007/10/31(水) 12:16:19
そだねw
650デフォルトの名無しさん:2007/10/31(水) 12:55:24
定義されてるならまだしも仕様書内で散見されるだけの言葉に解釈を加えてそれが仕様と思い込むなよな
651デフォルトの名無しさん:2007/10/31(水) 13:14:21
C言語の規格上

「trueはnonzero」は偽
「nonzeroはtrue」は偽
「falseはzero」は偽
「zeroはfalse」は偽

でFA?
652デフォルトの名無しさん:2007/10/31(水) 13:15:29
初心者スレ逝ってこい
653デフォルトの名無しさん:2007/10/31(水) 13:21:28
>>652
規格書も読めないの?
654デフォルトの名無しさん:2007/10/31(水) 13:50:27
おれのプログラムみてほしんだけど
みてくれます?
分割ファイルで18ファイルあるんですけど
655デフォルトの名無しさん:2007/10/31(水) 14:05:37
>>653
判断した根拠となる文章を、規格書から引用してこい。
話はそれからだ。
656デフォルトの名無しさん:2007/10/31(水) 14:11:29
>>654
ファイル数より寧ろみなきゃいけない文字/単語数が(ry

まあ見る気は粗無いが
657デフォルトの名無しさん:2007/10/31(水) 14:28:36
>>655
規格書に規定が無いのが根拠。
658デフォルトの名無しさん:2007/10/31(水) 14:34:47
ぐだぐだになるからC関連は禁止ネタ扱いにしないか。

以下、Brainfuckのコードに関する話題のみでよろしく。
659デフォルトの名無しさん:2007/10/31(水) 14:41:52
>>655
規格書から該当する規定を引用してこい
話はそれからだ
660デフォルトの名無しさん:2007/10/31(水) 17:15:05
>>647
また、C FAQネタですか・・・
661デフォルトの名無しさん:2007/10/31(水) 17:30:31
は?どこが?
662デフォルトの名無しさん:2007/10/31(水) 17:36:03
偽と未定義の区別が付かない人間が偽やヌルポインタを0だと思い込むのは自然な流れだな
663デフォルトの名無しさん:2007/10/31(水) 17:39:38
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
664デフォルトの名無しさん:2007/10/31(水) 17:41:28
これまたお粗末な燃料だな
665デフォルトの名無しさん:2007/10/31(水) 17:45:06
>>661
C FAQ 9.2
>もし君が「if((a == b) == TRUE)」が「if(a == b)」の改良版であると信じるのなら、
>な ぜそこで止めるのか。なぜ「if (((a == b) == TRUE) == TRUE)」を 使わないのか
666デフォルトの名無しさん:2007/10/31(水) 17:45:47
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーたはじまった
|   ,;‐=‐ヽ   .:::::|    \_______
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
667デフォルトの名無しさん:2007/10/31(水) 17:46:16
いい加減この2ch以外に生きがいを見つけろよなw
668デフォルトの名無しさん:2007/10/31(水) 18:12:23
規格に忠実かどうかとヘタかどうかはあまり関係ないと思うよ。
なんでこんな延びてるの。
669デフォルトの名無しさん:2007/10/31(水) 18:14:36
規格を理解できていないヤツが
こっちの方が正しい
とかいっちゃうから盛り上がってるのかと思われ
670デフォルトの名無しさん:2007/10/31(水) 18:18:40
>>665
C FAQ 9.2
>もし君が「if((a == b) == TRUE)」が「if(a == b)」の改良版であると信じるのなら、
>な ぜそこで止めるのか。なぜ「if (((a == b) == TRUE) == TRUE)」を 使わないのか
671デフォルトの名無しさん:2007/10/31(水) 18:53:38
しかし、流石にスピードが落ちたな。
672デフォルトの名無しさん:2007/10/31(水) 19:24:30
この寝ただけで1000レスですか・・・
673デフォルトの名無しさん:2007/10/31(水) 19:25:33
自転車置き場の大きさにも限度があるからな
674デフォルトの名無しさん:2007/10/31(水) 19:37:51
規格の話ならISOスレへ
675デフォルトの名無しさん:2007/10/31(水) 20:07:21
こんなやつらが標準化委員だったらC++0xは百年後だな
676デフォルトの名無しさん:2007/10/31(水) 20:08:17
全くだ
お前が標準化委員じゃなくてほんとよかったよ
677デフォルトの名無しさん:2007/10/31(水) 20:18:42
678デフォルトの名無しさん:2007/10/31(水) 20:21:11
うん
679デフォルトの名無しさん:2007/10/31(水) 21:19:59
>>677
672 デフォルトの名無しさん [] 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));
    }

----
これはないな
680デフォルトの名無しさん:2007/10/31(水) 21:32:37
わざわざ取り上げられるほど下手?
681デフォルトの名無しさん:2007/10/31(水) 21:41:32
物理的に間違ってないか?
682デフォルトの名無しさん:2007/10/31(水) 21:57:55
>(3)TRY&ERROR法を用いて、3,4,5,6,7,8,9それぞれの時のx乗が10になるxの値を求めよ。
これが問題かな?
683デフォルトの名無しさん:2007/10/31(水) 22:02:29
じゃあ n が整数の時点で無理だね
684デフォルトの名無しさん:2007/10/31(水) 22:27:05
今日はスレが落ち着いてるね
685デフォルトの名無しさん:2007/10/31(水) 22:31:25
>>682
問題文自体がへただね
6回読んでようやく意味がわかったよ
3〜9なnについてn^x=10を解けってことだな
686デフォルトの名無しさん:2007/10/31(水) 22:34:04
いくらなんでも6回は多いんじゃまいか
687デフォルトの名無しさん:2007/10/31(水) 22:34:45
それであのpow()か・・・
失礼
688デフォルトの名無しさん:2007/10/31(水) 22:42:19
宿題スレって人に教えられる程のレベルでない人が回答してる事もあるよね
でもそれは回答者が自分の勉強のためにやってるからいい事だと思う
そんな人を見下す類の行動はやめないか
689デフォルトの名無しさん:2007/10/31(水) 22:50:36
powあるのにあえて作ってるのはそういう条件?
690デフォルトの名無しさん:2007/10/31(水) 22:54:23
うん
691デフォルトの名無しさん:2007/10/31(水) 23:10:09
>>685
そのまま、対数つかったらあかんのか?
692デフォルトの名無しさん:2007/10/31(水) 23:57:26
>TRY&ERROR法
とやらの縛りがあるので対数はなしなんだろう
693デフォルトの名無しさん:2007/11/01(木) 00:05:17
だれかおれのviterbiアルゴリズムにケチつけてくれない?
音声認識のプログラムつくってんだけど
音声入力から音素入力からどこが間違ってるか全然わからんのだよ。
目標値と微妙にずれるから。

http://www.uploda.org/uporg1090721.txt

viterbiアルゴリズムとぐぐればすぐ説明されてるとおもうんですけど。
694デフォルトの名無しさん:2007/11/01(木) 00:08:34
デバグ依頼ですか?
695デフォルトの名無しさん:2007/11/01(木) 00:16:02
実行はできないとおもうんでね
データはいってないんで。

自分的にかなり無駄なことをしてるなーとは思うんです。
結構実行に時間かかるんでね。
このアルゴリズム通す前までは数値的にはあってるんすけど。
696デフォルトの名無しさん:2007/11/01(木) 00:58:09
デバッグ依頼スレとかあるの?
697デフォルトの名無しさん:2007/11/01(木) 02:13:35
てst
698デフォルトの名無しさん:2007/11/01(木) 03:01:03
ばst
699デフォルトの名無しさん:2007/11/01(木) 08:01:11
viterbiが何者だかしらないが、URLを開いて10秒の感想。後は読む気しない。
・〜2という関数名は下手な奴が多い
・インデントがガタガタ
・ホワイトスペースなんで入れないの?
・仮引数は二次元配列のほうがいい
・変数名が意味不明なのが多い。スペルアウトしろよ
700デフォルトの名無しさん:2007/11/01(木) 09:21:52
readabilityってやっぱり大切だなぁと、改めて思った。
701デフォルトの名無しさん:2007/11/01(木) 09:53:04
もう見つからない。
702デフォルトの名無しさん:2007/11/01(木) 10:13:59
本当に見てほしいなら、消えにくいところにうpしろよ
703デフォルトの名無しさん:2007/11/01(木) 13:47:59
俺見たけど、下手というより稚拙という感じだった。
批評するに値しないコード。
704デフォルトの名無しさん:2007/11/01(木) 17:30:33
やっと静かになったね。
もう飽きたんだろうね。
705デフォルトの名無しさん:2007/11/01(木) 17:33:43
納得してくれたからだろう
706デフォルトの名無しさん:2007/11/01(木) 18:06:54
>>693のおかげだな
GJ!
707デフォルトの名無しさん:2007/11/01(木) 18:10:44
何この召喚の儀式
708デフォルトの名無しさん:2007/11/01(木) 18:17:27
よくよく見たら、>>693ってバグ探し依頼だったのか。
そりゃスレ違いだわ・・・
709デフォルトの名無しさん:2007/11/01(木) 20:07:53
>>693もう消えてる・・・
再うpきぼん!
710デフォルトの名無しさん:2007/11/01(木) 20:41:18
俺もちらっと見たけど、インデントとかホワイトスペースとかの方針もまだ固まってないような
汚いだけのコードだったよ。
見ても面白くない。
711デフォルトの名無しさん:2007/11/01(木) 21:06:36
>>246
遅レスだが、>>224は多分NULL判定の事を言ってるんじゃないか?
CreateFileでエラーった時の戻り値ってNULLじゃねーべ。
224だと不味い気がする
712デフォルトの名無しさん:2007/11/01(木) 23:22:36
単なるバグは「ヘタ」じゃないと何度言ったら・・・
713デフォルトの名無しさん:2007/11/01(木) 23:27:37
会社の上司で単体〜システムテストでバグ1つ出さない人がいるんだが、
脳みその構造が知りたい
714デフォルトの名無しさん:2007/11/02(金) 00:08:00
まずは注意深くスレタイを読むことからはじめるんだ
715デフォルトの名無しさん:2007/11/02(金) 11:09:23
>>711
あ〜、それ気付かなかった。
ハンドル保持クラスのoperator bool()使ってたからすっかり忘れてた・・・。
224はバグだね。
716デフォルトの名無しさん:2007/11/02(金) 11:22:09
operator bool()ってどんなの?
717デフォルトの名無しさん:2007/11/02(金) 11:45:51
int hoge()
{
 if(a){
  b=a;
 }else{
//延々と長いコード
  ・・・
  ・・・
  ・・・
 }
 return 0;
}

普通、if(a)のところでreturn 0するだろ・・・。
718デフォルトの名無しさん:2007/11/02(金) 11:48:08
>>717
さんざん既出
719デフォルトの名無しさん:2007/11/02(金) 11:52:07
>>716
こんな感じ。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() ) が呼ばれる
    //開けた時の処理など
}
720デフォルトの名無しさん:2007/11/02(金) 13:22:20
if(a){
flg=a;
}
if(flg==a){
・・・

}

なんで別けるの?
ああああリファクタリングしてええええ
721デフォルトの名無しさん:2007/11/02(金) 13:23:34
>>720
それは しゅぎょう です (^o^)□
722デフォルトの名無しさん:2007/11/02(金) 13:52:06
>>720
よくわからんが・・・、
a がfalse で flgがfalse の時も・・・処理をしたいって事なのかな・・・?
しかしそれなら
if(a || (a == flg)){
・・・
}
でいいか・・・。
723デフォルトの名無しさん:2007/11/02(金) 14:05:07
aとflgを二つの変数に分けてるって事?
ifを二つに分けてるって事?
724デフォルトの名無しさん:2007/11/02(金) 14:08:17
>>723
推測の域を出ないが、

a=true  flg=true
a=true  flg=false
a=false flg=false

の時だけ処理したいのかも。
725デフォルトの名無しさん:2007/11/02(金) 15:19:09
>>724
2つめのif文の時点で
a=true  flg=false
となることはない。
つまり>>722でいい
726デフォルトの名無しさん:2007/11/02(金) 15:26:15
if( !(!a && flg) ){

}

if( a || !flg){

}
727デフォルトの名無しさん:2007/11/02(金) 21:32:23
int n = ……

if (n == 0)
{
//nが変わらない処理
}
if (n == 1)
{
//nが変わらない処理
}
if (n == 2)
{
//nが変わらない処理
}

ちなみに、//の処理内容は仕様上絶対にnが変わるはずのないものだった……
なんで、こんな処理してるんやろ……
728デフォルトの名無しさん:2007/11/02(金) 21:37:05
説明能力の無いやつは氏ね
729デフォルトの名無しさん:2007/11/02(金) 21:57:15
>>727
その外側をforで回しているのであれば良くあるコードと思う。
730デフォルトの名無しさん:2007/11/02(金) 22:00:33
nはどこから取ってくるんだろうか
731デフォルトの名無しさん:2007/11/02(金) 22:02:18
いや、ifのところをelse ifで書き換えても、switchで書き換えても変わらんコードでif使われてたから
732デフォルトの名無しさん:2007/11/02(金) 22:09:24
>>731
どちらかというと、ヘタだと思うその判断の方が微妙!
733デフォルトの名無しさん:2007/11/02(金) 22:41:47
>>727
そこだけ、を見れば変かもしれんが、もうちょっと前後の文脈がわからんと
何とも言えんな。
734デフォルトの名無しさん:2007/11/02(金) 22:52:45
無駄な比較のことか?
735デフォルトの名無しさん:2007/11/02(金) 22:57:07
>>727
switch(n){

case 1:
case 2:
case 3:
//nが変わらない処理
break;

}
736デフォルトの名無しさん:2007/11/02(金) 23:05:00
>>735 こうだろ。

if (a >= 1 && a <= 3) {
//nが変わらない処理
}
737デフォルトの名無しさん:2007/11/02(金) 23:09:36
>>736
たとえば2の時は別の処理にしたいとかなった時とかさ、面倒かなと思って。
738デフォルトの名無しさん:2007/11/02(金) 23:28:28
説明不足でスマン。

if (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のこともあるしね
739デフォルトの名無しさん:2007/11/02(金) 23:30:24
if (n == 0){
  //処理1
} if (n == 1) {
  //処理2
} if (n == 2) {
  //処理3
}
あとで処理1にnを変更する処理が追加される可能性があるとかじゃね?
740デフォルトの名無しさん:2007/11/02(金) 23:31:18
10年以上も前に修正された箇所をコメント化して残すってのも簡便して欲しいが、
以前居た現場で800行をif文で綺麗に2分割されたソースの片方が仕様変更で不要になったにも関わらず
コメント化して残せと言われたときは泣きたくなった
741デフォルトの名無しさん:2007/11/02(金) 23:32:30
>>739
そうだとしてもn==0の時あとの二回のifは無駄でしょ
742デフォルトの名無しさん:2007/11/02(金) 23:34:42
>>739
上でも書いたが、それは絶対にないソースコードだったのよ。仕様上もコード上もありえなかった。
743デフォルトの名無しさん:2007/11/02(金) 23:37:13
うん へただね
744デフォルトの名無しさん:2007/11/02(金) 23:42:53
そんなのどうでもいーじゃんと思える俺寛大
745727:2007/11/02(金) 23:49:35
そうか? 条件分岐の書き方って、定数右左よりも重要な話だと思ったんだがなぁ……
さして気にならんか。この手の事を気にしている俺がおかしいのかね。

ちなみに俺はelse ifかswitchと書いたが、switch派だったりするわけだが、
ここら辺もあまりこだわる必要なさげ?
746デフォルトの名無しさん:2007/11/02(金) 23:51:30
自分は分岐が多ければswitch使うけどこの程度ならifだな
747デフォルトの名無しさん:2007/11/02(金) 23:52:22
こういう場合は当然switch
748デフォルトの名無しさん:2007/11/02(金) 23:52:27
>>745
if-else か switchかは前後関係や変数の取りうる範囲によるなぁ。
749デフォルトの名無しさん:2007/11/03(土) 00:20:56
さいきん switch って、あまり使わなくなったなぁ。
break がもったいない。

while ((ch = なんとか)) {
 switch (かんとか) {
  case うんこ:
   break;
  case まんこ:
   break;
  case EOF:
   ここで while から抜けたい。
   break;
 }
}

こういうとき while から break 使ってスマートに抜け出せないんだよね。
貴重な break を switch ごときで無駄遣いしたくない、って感じ。
750デフォルトの名無しさん:2007/11/03(土) 00:30:52
>>749
たぶん、while文の中に、switch文を直に入れてるからスマートじゃないんだと...
関数でswitch文の処理を呼び出した方がスマートじゃね?

while (ch = 何とか){
if (hoge(かんとか)) break;
}
751デフォルトの名無しさん:2007/11/03(土) 00:33:12
特に意味の無い無駄な関数作られるぐらいなら、長い関数の方がマシ。
752デフォルトの名無しさん:2007/11/03(土) 00:36:52
しかし、switchにどうしてbreakが必要ってことになったんだろうな。
753デフォルトの名無しさん:2007/11/03(土) 00:37:40
それからswitch使うと、インデントも勿体無い。
754デフォルトの名無しさん:2007/11/03(土) 00:37:49
必要?C#か何かの話?
755デフォルトの名無しさん:2007/11/03(土) 00:41:45
屁理屈はいいって。
756デフォルトの名無しさん:2007/11/03(土) 00:48:09
かすかな腐臭がした
757デフォルトの名無しさん:2007/11/03(土) 00:58:45
あと、ヘタなコードというより、ヘタな言語仕様?って言ったほうがいいのかな?

label1:
 while (なんとか) {
  switch (かんとか) {
   case うんこ:
    break;
   case まんこ:
    break;
   case EOF:
    break label1; //← これ
  }
 }
(ここへ飛んでくる)

こんなの、死んでも使いたくない!
素直に goto 文使った方がよっぽど分かりやすいと思う。
758デフォルトの名無しさん:2007/11/03(土) 01:18:17
gotoを>>757みたいな使い方するのはバグの元だな
使うならエラー判定してエラーなら一気に終了させるとかそんな時だけだろ
759デフォルトの名無しさん:2007/11/03(土) 01:52:11
switch と case は同じインデントにしてます
スミマセンスミマセン
760デフォルトの名無しさん:2007/11/03(土) 02:00:54
>>749
こんなのはどう?
while ((ch = なんとか)) {
  switch (かんとか) {
    case うんこ:
      continue;
    case まんこ:
      continue;
    case EOF:
      break;
  }
  break;
}
761デフォルトの名無しさん:2007/11/03(土) 03:08:12
>>749
switch含むコードを関数に切りゃいいじゃねーか。
762デフォルトの名無しさん:2007/11/03(土) 04:07:44
switchのbreak用にbreakswなんて物があるCシェルは偉大w
763デフォルトの名無しさん:2007/11/03(土) 04:43:24
デジタルフィギュア
http://www.youtube.com/watch?v=9OHe2h3sZL0
764デフォルトの名無しさん:2007/11/03(土) 11:40:43
【ネット】「ATM手数料改悪」イーバンク銀行 板倉宏教授「2ちゃんねる・アメーバが刑法でいう『信用棄損』に触れる可能性」指摘★2
http://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/
765デフォルトの名無しさん:2007/11/04(日) 15:07:43
>>527
それを左辺定数の根拠にするのも間抜けだな
そんなの、間抜けなコンパイラ実装者が、!演算子をビット演算子としてのnotに
しないように強調してるだけじゃん
766デフォルトの名無しさん:2007/11/04(日) 19:15:41
>>738

例えば、設定しだいで分岐を変える場合:

#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
}
767デフォルトの名無しさん:2007/11/04(日) 20:32:48
s = getToken();
if ("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・・・以下、延々と続く
768デフォルトの名無しさん:2007/11/04(日) 21:24:55
まぁ、その関数が、せいぜい200行程度だと我慢できるが。
switch文にしろif文にしろそうだけど。

数千行にも及ぶのはカンベンして欲しい。
tokenの種類に応じた、分割統治とかそういうコーディングを
おぼえて欲しい。どうしても分割統治しづらいなら、
せめて処理を関数に分けて以下のようにしてくれ。
関数呼び出しのオーバヘッドが気になるなら、inlineに
でもすればい。

if ((handler = GetHandler(token)) == NULL) {
  return ERROR;
}

ret = handler(args);
769デフォルトの名無しさん:2007/11/04(日) 22:05:09
>>768
最初にtoLowerCase()して子文字列と較べるべき、

と言う話ではなかったのか・・・
770デフォルトの名無しさん:2007/11/04(日) 22:08:32
>>768
そんなんぶっちゃけドッチデモイイ
771デフォルトの名無しさん:2007/11/04(日) 23:44:35
動的に最適化するような処理系だと下手に関数テーブルにするより
switchのままのほうがよくヒットするものを先にチェックするように
なる「かもしれない」けど、そういう環境ばかりではないだろうしなー。
772デフォルトの名無しさん:2007/11/05(月) 00:08:57
>>771
GetHandler(token)の内容が、じつは

#defne GetHandler g_functable[token]

とかだったら、それよりも高速だな。
773デフォルトの名無しさん:2007/11/05(月) 01:12:12
>>769
漏れもそうオモタ。
"-=".equalsIgnoreCase(s) なんて笑っちゃうよね。
大文字も小文字もカンケー無いだろw
774デフォルトの名無しさん:2007/11/05(月) 01:16:34
>>773 大文字と…(+ФyФ)!小文字は関係有ります…
775デフォルトの名無しさん:2007/11/05(月) 01:20:03
主に「`C.系」を使用者が小文字を使用…(+ФyФ)?「`java.系」は…
776デフォルトの名無しさん:2007/11/05(月) 01:21:27
difer: >>775 char 9 line 1 'の'
777デフォルトの名無しさん:2007/11/05(月) 01:34:01
まぁCにしろ、Javaにしろ、どんな言語使おうが、
分割統治できないプログラムかくやつは、まだ素人。
778デフォルトの名無しさん:2007/11/05(月) 01:46:10
handler GetHandler(token){
 if ("add".equalsIgnoreCase(token)) {
  return AddHandler;
 } else if ("sub".equalsIgnoreCase(token)) {
  return 略;
 } else if ("mul".equalsIgnoreCase(token)) {
  return 略;
 } ...
}
779デフォルトの名無しさん:2007/11/05(月) 01:48:14
インデントが浅かったので再投
handler GetHandler(token){
    if ("add".equalsIgnoreCase(token)) {
        return AddHandler;
    } else if ("sub".equalsIgnoreCase(token)) {
        return 略;
    } else if ("mul".equalsIgnoreCase(token)) {
        return 略;
    } ...
}
780デフォルトの名無しさん:2007/11/05(月) 01:49:52
enum Hoge{
  add,
  sub,
  mul
}

str="add"
switch(Hoge.valueOf(str)){
add: ...
sub: ...
mul: ...
}
781デフォルトの名無しさん:2007/11/05(月) 01:51:09
return ; elseって書く奴はヘタクソ
782デフォルトの名無しさん:2007/11/05(月) 01:56:49
>>778,779

tokenが、文字列とかだったらハッシュとか使えよ。もしくは、初期化時に
テーブル構築して、文字列からIDに変換しておけばすむだけ。
783デフォルトの名無しさん:2007/11/05(月) 01:58:13
>>781
イミフメ
784デフォルトの名無しさん:2007/11/05(月) 01:58:37
javaも文字列定数でswitch出来るべきだと切実に思うよな・・・
785デフォルトの名無しさん:2007/11/05(月) 02:06:36
>>782
>ハッシュとか
個数が少ないとフルスキャンの方が早かったりする。多くなったら勿論ハッシュ
>初期化時にテーブル
enum switchなどと違ってテーブルの分、メモリに常駐するから気分的にちょっと


どちらも微々たる物って分かってます サーセンw
でも早過ぎる最適化かな
786デフォルトの名無しさん:2007/11/05(月) 02:12:46
下手とかの話じゃないけど、elseの前に改行入れて欲しいんだよな・・・

if(expr){
...
}
else if(expr){
...
}
else {
...
}

メリット:行がブロック単位に綺麗に分かれるなど
デメリット:行数が増える
787デフォルトの名無しさん:2007/11/05(月) 02:14:34
ちなみに>>767のような処理をする場合、
javaだと関数ポインタが使えないのでどうするのが正しいんだろう?
1)HashMapで関数名を取得してリフレクションする
2)クラスを作りまくって>>778
3)commons.chainを使う
4)文脈に応じて次のトークンを予想して処理する
5)その他
788デフォルトの名無しさん:2007/11/05(月) 02:29:47
>>785
ハッシュ使うまでもない、文字列から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;
}
789デフォルトの名無しさん:2007/11/05(月) 02:34:39
>>788
それだとコードがハッシュされちゃうんだよね
790デフォルトの名無しさん:2007/11/05(月) 02:43:20
>>789
>ハッシュされちゃう

日本語でオケ
791デフォルトの名無しさん:2007/11/05(月) 03:22:58
1)HashMapで関数名を取得してリフレクションする
リフレクションする意味がわからん
単にvalueにファンクタputして呼べばいいだけとちがうか?
関数ポインタつってもインタフェースわかってなきゃ使えないことに違いはないし
792デフォルトの名無しさん:2007/11/05(月) 12:38:10
>>786
あーなるほど、無駄に行数増えることに目を瞑ってまで自分の美意識を優先させるスタイルなわけですね。
別に否定はしませんが、私は自分の美意識と行数節約が合致するので、改行しないスタイルでいきますから。
793デフォルトの名無しさん:2007/11/05(月) 13:14:11
>>787
つCommandパターン
794デフォルトの名無しさん:2007/11/05(月) 14:58:14
定数は意地でもdefineするやつ。
というか、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];
と、ここに書き込んじゃっていいくらいだ。
795デフォルトの名無しさん:2007/11/05(月) 15:06:53
訂正:
sizeof(a) / sizeof(int)
796デフォルトの名無しさん:2007/11/05(月) 15:08:26
それは定数をdefineするのが云々とかいう問題じゃなくて、I/Fが悪い
797デフォルトの名無しさん:2007/11/05(月) 15:09:11
>>795
それを書くなら、sizeof a / sizeof a[0]が定石。
798デフォルトの名無しさん:2007/11/05(月) 16:17:09
>>786
俺はそうする派なんだが、それに加えて制御文はどんなときでも{}でくくりたい気持ちが
強いせいでこうするときもある

if(expr){
...
}
else{
if(expr){
...
}
}
else {
...
}

どうだ、さすがにこれはヘタだろ
799デフォルトの名無しさん:2007/11/05(月) 17:17:57
ドヘタ
800デフォルトの名無しさん:2007/11/05(月) 18:03:10
「ヘタ」 以前に、インデントくらいしろ。
801デフォルトの名無しさん:2007/11/05(月) 18:55:53
>>792
なんでそんなにキレてるの?
802デフォルトの名無しさん:2007/11/05(月) 19:05:07
if( a )
 foo();
else{
 bar();
 hoge();
}

if( a ){
 foo();
}
else{
 bar();
 hoge();
}

どっちがいいか
803デフォルトの名無しさん:2007/11/05(月) 19:33:49
どっちもダメ
804デフォルトの名無しさん:2007/11/05(月) 19:48:25
どうだったらいいんだ?
805デフォルトの名無しさん:2007/11/05(月) 21:29:24
>792程度でキレてると思う>801の方がおかしい。
806デフォルトの名無しさん:2007/11/05(月) 21:33:41
おまえら>>1読め
807デフォルトの名無しさん:2007/11/05(月) 21:35:43
if( a ){
 foo();
}else{
 bar();
 hoge();
}

やっぱ普通がいちばん
808デフォルトの名無しさん:2007/11/05(月) 22:45:26
>>805
だって「瞑ってまで」とか「いきますから」とか敵意剥き出しじゃんw
809デフォルトの名無しさん:2007/11/05(月) 22:50:06
>>798
それコンパイル出来ないんじゃね?
括弧の位置間違っただけだと思うけど
810デフォルトの名無しさん:2007/11/05(月) 23:00:37
if(aSystem == ”a”){}
if(!cSystem != "a"){}

とか理解に時間のかかるコードは糞と思ってる俺は異常か?
811デフォルトの名無しさん:2007/11/05(月) 23:08:44
if( !!hoge ){ ... }
hogeの定義を追ってみたら、bool operator !()constしか定義されてなかった(w
812デフォルトの名無しさん:2007/11/05(月) 23:36:02
>>811
嫌がらせw
813798:2007/11/05(月) 23:39:07
>>809
ああ、んだね。インデントを付けてない弊害が出た。

if(expr){
 ...
}
else{
 if(expr){
  ...
 }
 else{
  ...
 }
}
814デフォルトの名無しさん:2007/11/05(月) 23:45:33
>>811
でも
if(hoge){}
と出来るようにするのは簡単じゃないからね
まあ、イディオムがあるけど
815デフォルトの名無しさん:2007/11/05(月) 23:45:52
!!って必ずboolになるイデオムだよな、一応。
816デフォルトの名無しさん:2007/11/06(火) 00:00:30
オレが見た中でこれはないんじゃないかなっておもったコード。
int *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();
817デフォルトの名無しさん:2007/11/06(火) 00:05:06
>>787
おれはこんな感じかな。

1. インターフェースいっこ作る
2. 名前に対応する処理を無名クラスで実装してMapに詰める
3. 使うときに名前でgetする

無名クラスにするかどうかは処理の大きさ次第。
相当大きくなるならFactoryとして分離。
818デフォルトの名無しさん:2007/11/06(火) 00:24:12
「敵意むき出し」と「キレる」が同じだと思っている>808は「ヘタだなぁ」と思う。
819デフォルトの名無しさん:2007/11/06(火) 00:41:00
たまに"と'を間違える奴がいるんだよ
本気でバカだと思う
820デフォルトの名無しさん:2007/11/06(火) 00:57:14
>>816
上と下が等価じゃなくね?たぶん勘違いだと思うけど・・・
俺ならこんな感じか?
関数ポインタってこんな宣言でよかったっけ?

int * ( * func[] )( void ) = { hoge, hoge1, hoge2 };
for( i = 0 ; i < 3 ; i++ )
{
if ( ( p = func[ i ]( ) ) != 0 ) break;
}
821デフォルトの名無しさん:2007/11/06(火) 01:04:11
>>817
Javaの思想はわかるけど、単なる関数テーブルの呼び出しにも、
クラスを大量に作るとかダサイよな。
822デフォルトの名無しさん:2007/11/06(火) 01:05:11
> クラスを大量に作るとかダサイよな。
「大量に作る必要があるのはダサイよな」に訂正
823デフォルトの名無しさん:2007/11/06(火) 01:06:18
ライブラリの規模による
824デフォルトの名無しさん:2007/11/06(火) 01:15:29
>>823
ライブラリの規模によっては、牛刀をもって鶏を裂く類いのものだな。
825デフォルトの名無しさん:2007/11/06(火) 01:17:52
うん
826デフォルトの名無しさん:2007/11/06(火) 01:20:30
827デフォルトの名無しさん:2007/11/06(火) 01:37:37
>>821
クロージャが早く欲しいですな。
ついでにデフォルト引数も使えるようになって欲しい。
828デフォルトの名無しさん:2007/11/06(火) 02:20:30
>>821
無名クラスぐらいだと、クラスを作ってるって感覚はないけどなぁ。
処理が大きいんならちゃんと名前付けたいし。

getter, setterの方がよっぽど気になる。
829デフォルトの名無しさん:2007/11/06(火) 02:33:25
>>827はオブジェクトがクロージャの役目を果たすぞ、と

とりあえずメソッドの実行(と参照)は java.util.reflection.Method#invoke() でほとんど出来るから問題ないとして
話がC++/C/Javaに集中しているのにワロタ
830デフォルトの名無しさん:2007/11/06(火) 03:03:24
>>829
>C++/C/Javaに集中してる

C#,Perl,Rubyとかの話してもしょうがないだろう。
831デフォルトの名無しさん:2007/11/06(火) 05:49:37
C++からJavaに移った俺としてはEclipseのリファクタリング機能に愛を感じる
832デフォルトの名無しさん:2007/11/06(火) 06:59:44
あれはいいものだ
833デフォルトの名無しさん:2007/11/06(火) 18:28:41
100 INPUT A
110 IF A=1 THEN ELSE 190
120   GOSUB*はげ
130   PRINT "ほげ"
140   処理・・・
190 'endif

この IF THEN ELSE の使い方に感動した事がある。
834デフォルトの名無しさん:2007/11/06(火) 20:04:36
ところで、>>816 って何?
835デフォルトの名無しさん:2007/11/06(火) 21:21:49
816のコードだとhoge2()とかhoge3()が呼ばれることはないやな
836デフォルトの名無しさん:2007/11/06(火) 21:57:03
int *p = NULL;

p || (p = hoge()) || (p = hoge2()) || (p = hoge3());

とか書いちゃうもんね♪
837デフォルトの名無しさん:2007/11/06(火) 22:03:15
うん
838デフォルトの名無しさん:2007/11/06(火) 22:35:38
>>816
よくわからんのだが...
int *p;
p = hoge();
でいいんじゃないのか?
ループが全く無駄に見えるんだが...

for(i = 0 ; i < 4 ; i++)
{
if (i == 0){ // iの初期値は0なんですが
p = hoge();
break; // たぶん、ここでループが終わってるよね?
}
}
違う?
839デフォルトの名無しさん:2007/11/06(火) 23:44:41
>あーなるほど、無駄に行数増えることに目を瞑ってまで

会社でどんな教育受けたか知らないし、まだ学生なのかはわからんが。

      行 数 な ん て ど う で も い い

ことを、まず理解しる。

もしあなたが、仕事を発注する立場にあるとして、代金を行数ベースで
払うように会社の指示があるとしたらそれは不幸だ。
840デフォルトの名無しさん:2007/11/06(火) 23:47:21
そんな会社まだあるの?
841デフォルトの名無しさん:2007/11/06(火) 23:49:48
>>840

しらねーけど、「行数を稼ぐ目的」とか「無駄に行数を稼ぐ」
とかいう発言の意図を考えると、そうなんじゃないかなと・・・。
842デフォルトの名無しさん:2007/11/06(火) 23:49:53
>>839
学生でも行数なんてどうでもいいことは理解してるよ。
843デフォルトの名無しさん:2007/11/07(水) 00:20:15
どこに「無駄に行数を稼ぐ」話が?
844デフォルトの名無しさん:2007/11/07(水) 00:21:44
???
何か言ってる人が居るよ
845デフォルトの名無しさん:2007/11/07(水) 00:24:31
>>839>>792じゃね?
確かにちょいと離れてるから俺もはじめは???になったけど
846デフォルトの名無しさん:2007/11/07(水) 00:26:36
え、じゃあ自作自演ってことになるけど
847デフォルトの名無しさん:2007/11/07(水) 00:29:02
俺の予想では、>>792 == >>843 だ。

どっちでもいいけど、

>私は自分の美意識と行数節約が合致するので、改行しないスタイルでいきますから。

↑頭わるそうだな
848デフォルトの名無しさん:2007/11/07(水) 00:30:19
うん
849デフォルトの名無しさん:2007/11/07(水) 00:32:08
同じプロジェクトになったら、俺は>>792のソースに改行を入れまくってしまうかもしれないw
850デフォルトの名無しさん:2007/11/07(水) 00:50:07
YATTA!YATTA!
851デフォルトの名無しさん:2007/11/07(水) 01:01:30
無駄に行数が増えると FORTRANカードがもったいないだろ。
852デフォルトの名無しさん:2007/11/07(水) 01:55:33
1メソッドが1000行あるより、100行程度のほうが読み易い
853デフォルトの名無しさん:2007/11/07(水) 03:33:12
if( a ){
 foo();
}else{
 bar();
 hoge();
}

は、

a && (foo(), 1) || (bar(), 1) && (hoge(), 1);

と書けば一行ですむね。
YATTA!YATTA!
854デフォルトの名無しさん:2007/11/07(水) 03:39:52
>>853
お馬鹿なコンパイラ(BCC5.9.2)を使ったら後者のコードはわざわざalに01h
をロードしてtestしてた
855デフォルトの名無しさん:2007/11/07(水) 03:47:37
ちなみにVC8でコンパイルしても ,1 という部分はしっかりコードに残ってました
無駄なのにね
856デフォルトの名無しさん:2007/11/07(水) 03:48:28
>>853
Perlな人が好みそうなキモさだな
857デフォルトの名無しさん:2007/11/07(水) 03:51:53
VC7.1のassertの定義

#define assert(exp) (void)( (exp) || (_assert(#exp, __FILE__, __LINE__), 0) )

0 は残るんかいね。
858デフォルトの名無しさん:2007/11/07(水) 03:55:11
>>857
BCC5.9.2、VC8.0では残ります
859デフォルトの名無しさん:2007/11/07(水) 03:58:51
なんと言うキモさ。

#define assert(exp) if(exp) { } else { _assert(#exp, __FILE__, __LINE__); }

では駄目だったのだろうか。
860デフォルトの名無しさん:2007/11/07(水) 04:06:00
>>855 >>858
あれ、VC7.1だけど、>>853のコード、最適化かけたら 1 消えたぞ。
861デフォルトの名無しさん:2007/11/07(水) 04:07:38
そりゃ駄目だな
862デフォルトの名無しさん:2007/11/07(水) 04:08:00
int a = rand();
a && (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
863デフォルトの名無しさん:2007/11/07(水) 04:11:11
てか、関数の呼び出し回数まで畳み込まれてるな。スゲェ
864デフォルトの名無しさん:2007/11/07(水) 04:13:02
>>860
すまん最適化掛けてなかった。
掛けたら関数の中身が空なら一行になってしまったし、中身ありでも
,1 は消えた。BCC5.9.2は相変わらず糞。
865デフォルトの名無しさん:2007/11/07(水) 04:41:30
関数の戻り値をすべて int にしてぇ、
int foo(), bar(), hoge();

a ? foo() : (bar(), hoge());

じゃダメ?
866デフォルトの名無しさん: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);

なんつったりして
867デフォルトの名無しさん:2007/11/07(水) 14:04:10
凶悪だなぁw
868デフォルトの名無しさん:2007/11/07(水) 19:11:51
>>853のa && (foo(), 1) || (bar(), 1) && (hoge(), 1);
って
a && (foo(), 1) || (bar(), hoge());
↑みたいにしちゃダメ?
処理系によってbarとhogeの実行順序が入れ替わる
可能性があるからダメってこと?
869デフォルトの名無しさん:2007/11/07(水) 20:00:55
どっちもダメだろ、素直にif使っとけよ
下手ではないんだろうけど読みづらすぎる
870デフォルトの名無しさん:2007/11/07(水) 20:24:17
一回だけ呼び出せば済む関数をfor文とかでぶん回して使われてたときにはムカついたなぁ……
しかも、その関数の中身がSleepやらファイルアクセスやらで……
871デフォルトの名無しさん:2007/11/07(水) 21:08:12
俺も見かけたことあるなぁ。

for(int i=0; i<10; ++i){
  switch(i){
    case 0:
      〜〜
    case 1:
      〜〜
     ・
     ・
     ・
  }
}

こういうのだろ。
872デフォルトの名無しさん:2007/11/07(水) 21:16:26
それ、breakの使い方によってはアリでしょ。
873デフォルトの名無しさん:2007/11/07(水) 21:21:58
なしだっつうの
874デフォルトの名無しさん:2007/11/07(水) 21:44:02
>>871
そんなん書く馬鹿いるんだ……それを放置しておく所って、どんな場所だよ。
そこまで馬鹿だと、教育した人間の方も気になるな
875デフォルトの名無しさん:2007/11/07(水) 21:46:47
>>874
俺学生だから。
876デフォルトの名無しさん:2007/11/07(水) 21:52:43
今までの流れを纏めると、こうなるな。

for(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);

邪道すぐる
877デフォルトの名無しさん:2007/11/07(水) 21:55:06
ここで颯爽とDuff's Deviceが登場
878デフォルトの名無しさん:2007/11/07(水) 21:55:17
switchの前後に共通の処理が入ってるなら普通にありだな
879デフォルトの名無しさん:2007/11/07(水) 21:55:38
i==0 && (hogehoge0(), 1)の意味がわからない・・・

(hogehoge0(), 1)ってどう解釈すればいいのでしょうか?
880デフォルトの名無しさん:2007/11/07(水) 22:02:27
>>879
カンマ演算子
881デフォルトの名無しさん:2007/11/07(水) 22:06:47
>>878
マクロ使えば?

#define m(statements) { statements ; foo(); }
  m(
    hoge();
    for(int i=0; i<10; ++i){}
  )
  m(
    piyo();
    bar();
  )
#undef m
882デフォルトの名無しさん:2007/11/07(水) 22:07:08
883デフォルトの名無しさん:2007/11/07(水) 22:24:45
>849 にはたくさん吹いた。

>853 にはいっぱい感動した。
884デフォルトの名無しさん:2007/11/07(水) 23:44:05
// 今日見た。
void 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
}
// つっこみどころが多すぎてもうね。
885デフォルトの名無しさん:2007/11/07(水) 23:54:16
つっこみどころ=インデントまったく無し
886884:2007/11/08(木) 00:05:15
>>885
そこ違うw 今手打ちしたんだからそこが再現できてないのは勘弁して。
# いや、インデントもちょっと変だったけどね
887デフォルトの名無しさん:2007/11/08(木) 00:41:11
>>884
少なくともmemcpyはswitchのあと一か所にまとめたいな。
888デフォルトの名無しさん:2007/11/08(木) 00:54:08
なんでもループに突っ込みたがる奴はよくいるだろ
無駄なifとか入れてコード短くなったとか喜んでるアホが
889デフォルトの名無しさん:2007/11/08(木) 01:26:01
>>884
>void func()
>{
>int loopCounter;

===========ここまで読んだ========
890デフォルトの名無しさん:2007/11/08(木) 11:10:01
C系より先にPascal系なDelphiから入った俺には
else の前のセミコロンが溜まらなく気持ち悪いのだが
C系から入った人間は何も思わないんだろうか
891デフォルトの名無しさん:2007/11/08(木) 11:19:40
初心者にセミコロンを付けるかどうかを迷わせるような言語よりはいいんじゃないかなぁ
892890:2007/11/08(木) 11:49:52
>891
それってPascal系のこと?

俺としては、if文【if 式 then 文 else 文】の終わりに付けるって意味で
elseの前(=if文の途中)にセミコロンは無いのが自然なのだけれど。

C系の場合はif文とelse文は別の文って考えるのかな?
893890:2007/11/08(木) 11:52:27
あ、何が言いたいかというと >>786 みたいな
elseを次の行に持ってくるスタイルにも疑問持ってしまうワケです。
「else は if の一部なのになんで次の行に持ってくるかなぁ」と。
894デフォルトの名無しさん:2007/11/08(木) 12:40:01
>>868
a && (foo(), 1) || (bar(), hoge(), 1);
じゃないか?


セパレータとターミネータの違いだからどーでもいいかな
895デフォルトの名無しさん:2007/11/08(木) 12:53:20
>>893
セミコロンってのは「;」だよな?
if(exp);
else{
  ...
}
こういうことか?
これは確かに気持ち悪いな、素直に論理否定使えよと言いたくなる

「}」のことならあまり深いことは考えてないんじゃないか
そういうことする奴でdo-whileとかtry-catchとかと一致させてない奴も多いし
896デフォルトの名無しさん:2007/11/08(木) 18:30:50
>>893
簡易的に書くと
  if構造: if(式) 文 else 文
  文  : {文*} | 式;
という感じ

elseif構文そのものは無いが、else ifのネストを利用して
擬似的に表現するのは定石の一つなので
  if(式)      文
  else if(式)  文
  else     文
これは変じゃないよな?

そして↑の各行を複数行(文→{文*})で書くと以下のようになる
  //if(式) 文
  if(式){
    文*
  }
  //else if(式) 文
  else if(式){
    文*
  }
  //else 文
  else{
    文*
  }
897デフォルトの名無しさん:2007/11/08(木) 18:32:15
(続き)

もしくは
  //if(式) 文
  if(式)
  {
    文*
  }
  //else if(式) 文
  else if(式)
  {
    文*
  }
  //else 文
  else
  {
    文*
  }

というのを考えて、elseの前に
改行を入れるのは変じゃないと思った
898デフォルトの名無しさん:2007/11/08(木) 18:44:42
言い方が悪かったも。
elseの前に改行というより、
文の後に改行を入れる。

つまり}の後に改行を入れるのは変じゃないと思う、と言いたかった
899デフォルトの名無しさん:2007/11/08(木) 18:46:36
「たも」って何のキャラだよ俺・・・
900デフォルトの名無しさん:2007/11/08(木) 19:23:20
if (・・・) {
 文;
} else if (・・・) {
 文;
} else if (・・・) {
 文;
} else {
 文;
}

if (・・・)
{
 文;
}
else if (・・・)
{
 文;
}
else if (・・・)
{
 文;
}
else
{
 文;
}

どっちかに統一しとけば問題ない。
901デフォルトの名無しさん:2007/11/08(木) 19:25:47
if (・・・) {
 文;
}
else if (・・・) {
 文;
}
else if (・・・) {
 文;
}
else {
 文;
}

これは見苦しい例。改行するのか、しないか、どっちかハッキリしろ!
902デフォルトの名無しさん:2007/11/08(木) 19:30:09
>>898
if 〜 else 〜
って構文じゃないと駄目って事か?
お前年幾つだよ!!!
コボルじゃ、わりと早いうちにブロックifになってたし、
今じゃBASICですら、ブロックifが主体で、1行のif文なんてお目にかかることが無いというのに...
903デフォルトの名無しさん:2007/11/08(木) 19:37:14
>>853
すごいなあw
904デフォルトの名無しさん:2007/11/08(木) 19:55:11
>>900
「文;」の時点で理解出来てないだろ。
c言語のBNF書式での定義をまず見てきた方が良い。
statementには;は付かない、
exprに;を付けたものはstatementの一つ。

つまり文(statement)の終わりは"}"か";"だ

>>901
statementの終わりに改行とハッキリしてる
905デフォルトの名無しさん:2007/11/08(木) 20:00:46
コーディングスタイルはどーでもいいよ。
誰が見てもあきらかにヘタなコード晒そうぜ。
自分が1年目に書いたコードをここにコピペするだけでいいんだから、簡単。
906デフォルトの名無しさん:2007/11/08(木) 20:02:24
>>902
898だけ読んだなら良いけど、
>>896-898読んだ上で、そう解釈したのなら話のしようがないぞ・・・
907デフォルトの名無しさん:2007/11/08(木) 20:05:23
>>905
>1年目に書いた
確かにw
908デフォルトの名無しさん:2007/11/08(木) 20:08:04
>>904
ぼうや、人の揚げ足とるのがそんなに楽しいの?
それを言うなら、「文*」 の方がよっぽどおかしいね。掛け算の右辺が無い。明らかに構文エラーwww
おまい、Cコンパイラを実際に使ったこと無いな?教科書読んだだけだろ?
アタマデッカチ!
909デフォルトの名無しさん:2007/11/08(木) 20:14:17
>>908
最後の行といい、頭悪そうレスだな・・・。
あと、sageようぜ。
910デフォルトの名無しさん:2007/11/08(木) 20:18:57
>>905
当時のパソコンどこにあるかわかんないよ
911デフォルトの名無しさん:2007/11/08(木) 20:22:40
>>908
それはクリーネスターを援用しただけで、897は擬似コードだろ。
912デフォルトの名無しさん:2007/11/08(木) 20:30:56
少なくとも揚げ足では無いわな
913デフォルトの名無しさん:2007/11/08(木) 20:31:52
>>906
>>896-898では、ちゃんとした、ブロックif式になっているのに、elseの前に改行があるのが許せないんだろ?
つまり、1行ifが好みって事じゃないのか?
914デフォルトの名無しさん:2007/11/08(木) 20:32:49
ほう、じゃぁ、どこのCコンパイラだい?「文*」なんてコードが通るのは?
マイクロソフトかい?ボーランドかい?どうせGNUだろw
915デフォルトの名無しさん:2007/11/08(木) 20:36:19
低脳失せろ
916デフォルトの名無しさん:2007/11/08(木) 20:40:32
>>913
確認だけど、>>902>>898宛だよな?
>>898>>897の最後の言い方を訂正しただけなんだけど・・・。
むしろelseの前に改行があって良いと、と言っているんだよ。
917デフォルトの名無しさん:2007/11/08(木) 20:50:43
>>1
禁止ネタ(超既出)
・記述スタイル

ということでここまで
918デフォルトの名無しさん:2007/11/08(木) 21:17:30
PascalのセミコロンはCと意味が違うってのを知ってるやつと知らないやつ
でレスの傾向が違う気がする。
919デフォルトの名無しさん:2007/11/08(木) 21:18:42
endの前だけセミコロンがいらないなんてキモイ
920デフォルトの名無しさん:2007/11/08(木) 21:24:31
Pascalの;はセパレータだから、Cの
{ hoge(); huga(); }
は、
begin hoge(); huga() end.
というよりは、
begin hoge() ; huga() end.
な感じだな。(セパレータっぽく見えるように前にも空白を置いてみた)

begin hoge(); huga(); end とすると、
huga()のあとにもう1つ文(空文)があることになる。
921デフォルトの名無しさん:2007/11/08(木) 21:30:38
BASIC だと
IF A=1 THEN GOSUB *HOGE : GOSUB *FUGA ELSE GOSUB *GGERO
                   ̄
922デフォルトの名無しさん:2007/11/08(木) 21:32:25
perl だと
if (a == 1) { &hoge(); &fuga() }
                  ̄ ここにセミコロンは無くてよい
923デフォルトの名無しさん:2007/11/08(木) 21:34:56
a = 1 * 2;
b = 1 *

あれれおかしいぞ。2行目でエラーが出ます。なんで?
924デフォルトの名無しさん:2007/11/08(木) 21:37:46
>>918
pascalってPL/SQLとかなり似てるって聞く。
なので違いは一応分かる。
pascal系はむしろ"}"が無いので複数行で書いたら
普通にelseif、elseの前に改行が来ると思う。
925デフォルトの名無しさん:2007/11/08(木) 21:45:05
PL/SQLがPascalに似てるんじゃね?
926デフォルトの名無しさん:2007/11/08(木) 21:54:03
>>925
そうだよ。だから「pascal系は」って書いた。
出だしからいきなりPL/SQLって単語出すのアレだったから
先にpascalを持ってきただけだよ。
927デフォルトの名無しさん:2007/11/08(木) 22:07:22
Pascal系じゃなくてAlgol系だろ。常考。
928893:2007/11/08(木) 22:08:32
>>917
荒れる話題を出してしまってすみませんでした。
このレスしたら去ります…。

>>895
>if(exp); else
あ、そういう話ではないです。

>>896
if 式 then 文
else if 式 then 文
else 文;

ならあまり違和感は無いです。

if(式) 文;
else

と来ると結構違和感ありますね。
「if 文終わったと思ったら、続くのかよ!」みたいな。

閉じブレースの件は、C言語だと } の直後にセミコロンを書く必要が無いので
} を脳内変換で end; と読んでしまっているというか、そんな感じですかねぇ…。
929893:2007/11/08(木) 22:10:05
>>913
私は >906 では無いですが
C言語のコード読むときに、} や ; を見つけると
そこで文を切りたくなるんですよ。
} else だと流石に、明らかに続いてると分かるのですが
改行を入れられると、} が文末に見えてしまう。
else が来たときに、ぎょっとするんですよ。

>>918
どうやら、そうみたいですねぇ…。

>>919
確かにそこはキモイです。私も。
絶対 end の前の文にもセミコロンは付けてます。

>>920
Pascalのセミコロンはセパレータ、かぁ…なるほど。
確かにそう言われてみればそうなのかも。


へんな話題出してしまって済みませんでした。
もう去ります…。
930デフォルトの名無しさん:2007/11/08(木) 22:47:17
javaの話なんだけど、聞いてくれ。
こういうコードって、気持ち悪いと思わないか?

package foo.bar;
import foo.bar.baz;

感覚的には、親クラスの中で子クラスを利用しているのと同じような気持ち悪さだ。
931デフォルトの名無しさん:2007/11/08(木) 23:14:47
ん、こうだった。

package foo.bar;
import foo.bar.baz.*;
932デフォルトの名無しさん:2007/11/08(木) 23:19:32
>>893
procedure foo; forward;
procedure bar; forward;
...
if ( cond ) then
begin
    foo; {←}
end
else
begin
    bar;
end;

ゴメンナサイゴメンナサイ
933デフォルトの名無しさん:2007/11/08(木) 23:46:37
つーか、ブロックの終わりと始まりが同じ行にあるほうがキモいよな。

if(a){
}else{
}

ウゲッ。

{

} {

}
934デフォルトの名無しさん:2007/11/09(金) 00:09:01
まあ、コーディングスタイルなんて、凝ると、凄いことになっちゃうしな...
1行80文字まで、1関数20行までとかな...
935デフォルトの名無しさん:2007/11/09(金) 00:22:44
if (・・・)
 { 処理A }
else
 { 処理B }

これがいちばん、文法的には正しい。
936デフォルトの名無しさん:2007/11/09(金) 00:25:02
文法的にはみんな正しい
937デフォルトの名無しさん:2007/11/09(金) 00:27:56
なに禁止ネタを話し合ってるんだ?
938デフォルトの名無しさん:2007/11/09(金) 00:29:17
文法的な正しさなら、こうだろう。
if (...) {
 ...
}
else {
 if (...) {
 }
 else {
  if (...) {
  }
 }
}

このネストが煩わしいから
if () {
}
else if () {
}
else {
}
が好まれるわけで。

いやね、if () の処理が1行でも{}を省くな、って言っている人でも、最初のようにネストさせる人はまずいないんだよね。
939デフォルトの名無しさん:2007/11/09(金) 00:30:21
940デフォルトの名無しさん:2007/11/09(金) 00:35:12
>>939
文法的に間違っていないことは、みんなの共通認識だと思うよ。
それを、得意そうに指摘するのはw


恥ずかしいwww
941デフォルトの名無しさん:2007/11/09(金) 00:36:41
さっさと「文法的な正しさ」なんて言う事の間違いに気づけよ
942デフォルトの名無しさん:2007/11/09(金) 00:38:37
if (!(...))
if (!(...))
if (!(...))
if (!(...))
if (!(...)){
}
else {
}
else {
}
else {
}
else {
}
else {
}
943デフォルトの名無しさん:2007/11/09(金) 00:40:28
技術者として間違っている
944デフォルトの名無しさん:2007/11/09(金) 00:41:43
むしろ人として(ry
945デフォルトの名無しさん:2007/11/09(金) 00:59:47
if(a--) if(a--) if(a--) if(a--) if(a--) if(a--) if(a--) if(a--);
else return 7; else return 6; else return 5; else return 4;
else return 3; else return 2; else return 1; else return 0;
946デフォルトの名無しさん:2007/11/09(金) 01:05:05
21世紀にif文の書き方を議論するぐらいなら、
名前空間のつけ方とか
パッケージの割り方とか
イベントの挙動とか
話すことたくさんあるだろうと思うんだが
947デフォルトの名無しさん:2007/11/09(金) 01:33:01
>>946
22世紀になってif文が消えた時に後悔し内容に今話しておくんだ
948デフォルトの名無しさん:2007/11/09(金) 01:49:43
if () {
}
else if () {
}
else {
}


こんなキモイ書き方、誰も好んじゃいねぇ〜よ!
949デフォルトの名無しさん:2007/11/09(金) 01:58:22
そういえば、最近else ifを書く頻度が減った気がする。
950デフォルトの名無しさん:2007/11/09(金) 02:03:48
ifdef とか使い「まくってる」コード。
著しくメンテナンス性が落ちる。
951デフォルトの名無しさん:2007/11/09(金) 02:20:20
はい
952デフォルトの名無しさん:2007/11/09(金) 02:22:36
コンパイラによって互換性が無いんだから ifdef の雨嵐でも仕方あんめぇ。
コンパイラが1種類しかない言語がウラヤマシイ。
953デフォルトの名無しさん:2007/11/09(金) 03:04:57
対応がおかしくなければ、たいていのスタイルはおっけ。
贅沢言うなら、一人で書いたソースは、スタイルが統一
されているとうれしい。

どうせ整形してから読むし。
954Java2年生:2007/11/09(金) 08:08:17
【×】
if (flag) {
  flag = false;
} else {
  flag = true;
}

【〇】
!flag;

955デフォルトの名無しさん:2007/11/09(金) 08:14:01
【〇】
flag = !flag;
956デフォルトの名無しさん:2007/11/09(金) 08:16:56
if foo = bar then begin
do_somthing
end else begin
do_other_things
end
957デフォルトの名無しさん:2007/11/09(金) 08:25:27
>>952
互換性を保つのは別のレベルでやれと。
そういう意見じゃないか?

俺はあまりにも低機能なメソッドで構成されたプログラムは嫌だ。
1関数、1行〜5行みたいな。

飛びすぎて読むの疲れるし、push pop 多そうだな、と思って嫌気が差す。
958デフォルトの名無しさん:2007/11/09(金) 08:27:40
>>957
インライン展開できないコンパイラをお使いですか?
959デフォルトの名無しさん:2007/11/09(金) 10:09:07
>>958
引数が少なくて push pop しないまでも、レジスタへの代入はあるだろうな。

というか、そういうコードを書いてるのか?
960デフォルトの名無しさん:2007/11/09(金) 10:36:53
>>959 インライン展開を理解しる
961デフォルトの名無しさん:2007/11/09(金) 10:46:53
>>959
>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メンバにアクセスするのと何ら変わらない。
つまり、短い関数がスタックやレジスタや、その他のコストを余計に発生させるとは一概には言えないということ。
# 勿論、短い(深く再帰する)再帰関数が無駄にスタックを消費することは言うまでもないが。
962デフォルトの名無しさん:2007/11/09(金) 10:47:33
あ、typo。
array[x + w * h]じゃなくてarray[x + w * y]だね。
963デフォルトの名無しさん:2007/11/09(金) 11:47:27
159 名前:デフォルトの名無しさん[sage] 投稿日:2007/11/06(火) 11:38:04
釣られてやるか。

少なくともBNFではシンタクスしか理解できんわな。
セマンティクスはBNFでは表現できないし、理解できない。

ソースを読めるかどうかは、前提となる技術や理論や知識を読み手が持っているか
どうかにかかっているが、ソースがモデル化している概念や仕様に関する
知識が零である場合、ソースを読んでそれを再構成しようとするのは非常に
難しくなる。それが複雑であればあるほどに。

>>155-156は口だけ厨房だな。
964デフォルトの名無しさん:2007/11/09(金) 12:32:32
>>963
まだその話してんのか・・・w
まさにシンタックスについて話したかったからBNFモドキで
書いたってことすら分かってないだろ、お前・・・。
965デフォルトの名無しさん:2007/11/09(金) 12:34:36
君の狭いすき間にinsert()メソッドを適用させてくれ
966デフォルトの名無しさん:2007/11/09(金) 12:42:25
すき間ってnullじゃね?
967いかん、スレが違うのか:2007/11/09(金) 12:46:43
push_back()じゃダメ?
968デフォルトの名無しさん:2007/11/09(金) 15:38:22
159 名前:デフォルトの名無しさん[sage] 投稿日:2007/11/06(火) 11:38:04
釣られてやるか。

少なくともBNFではシンタクスしか理解できんわな。
セマンティクスはBNFでは表現できないし、理解できない。

ソースを読めるかどうかは、前提となる技術や理論や知識を読み手が持っているか
どうかにかかっているが、ソースがモデル化している概念や仕様に関する
知識が零である場合、ソースを読んでそれを再構成しようとするのは非常に
難しくなる。それが複雑であればあるほどに。

>>155-156は口だけ厨房だな。
969デフォルトの名無しさん:2007/11/09(金) 15:50:49
>>853a && (foo(), 1) || (bar(), 1) && (hoge(), 1);は
a=1の場合、a && (foo(), 1)が真になるからここで処理を終了するという風になっているのでしょうか?
970デフォルトの名無しさん:2007/11/09(金) 15:54:45
知らなくていい。

書くな、そんな糞コード。
971デフォルトの名無しさん:2007/11/09(金) 16:59:19
短絡評価でググれ
972デフォルトの名無しさん:2007/11/09(金) 17:02:19
>>971
そんなのがあるのですね・・・
入門書にかかれていないのって結構多いですね。
973デフォルトの名無しさん:2007/11/09(金) 18:02:34
糞コードと言うか、もう”ウイルス”と言っても過言ではない。
974デフォルトの名無しさん:2007/11/09(金) 18:07:56
訂正した方が善いのでしょうか?
`python-lib_text.に`SyntaxError.が…(+ФyФ)!ですが動作する物ですね…
975153:2007/11/09(金) 18:36:18
>>934
DOSでプリントアウトできて、
ブラウザにドロップしてもインデントが乱れなくて、
E-Mailでのreplyにも耐える
ようにすると8タブで72文字になってしまうw
976153ではありません:2007/11/09(金) 18:37:58
変なクッキー食ったままだったorz
977デフォルトの名無しさん:2007/11/10(土) 00:14:41
>>934
サブルーチンが20行以内とか、まともにコーディングしたことないやつのたわごとだろ。
978デフォルトの名無しさん:2007/11/10(土) 00:15:37
1〜5行程度の関数って結構書くけどなぁ・・・
979デフォルトの名無しさん:2007/11/10(土) 00:28:36
全部20行以内と、1行の関数を書くことがあるのとはぜんぜん違う。
980デフォルトの名無しさん:2007/11/10(土) 00:33:37
あと、よくいるのが「一画面以内」だな。
画面が20〜25行が主流だったころから、100行表示できる環境もある今日まで、ずっと言われ続けている。
981デフォルトの名無しさん:2007/11/10(土) 00:44:15
あ、全部の話なのねw
そんなこと言い出すやつがいるところはカンマ演算子でも使いまくって横に書いてやればいいんだ
横も縦もルール範囲内ですよ?って
982デフォルトの名無しさん:2007/11/10(土) 01:12:56
>>977
1関数20行以内程度なら、例外が出ないということは無いが、全く出来ないというわけでもない
とは言え、時代に合わせて、40行位までは認めてよとは言うだろうけどな

20行以内なんてのは、どうせDOSのエディタで1画面分だろうしな
983デフォルトの名無しさん:2007/11/10(土) 01:18:43
40行でも少ないだろ。
100行くらいなら、まあ、許容できるかなって感じ。
984デフォルトの名無しさん:2007/11/10(土) 01:22:14
>>981
インデントを使わず、;で改行せずにやれば結構40行でも行けるかもな……

絶対やりたくないけど
985デフォルトの名無しさん:2007/11/10(土) 01:27:36
でも、980〜984のレスまでで30行ほどあるんだよな...
986デフォルトの名無しさん:2007/11/10(土) 01:29:37
C3プロジェクトのメソッドの平均行数は、6行だったかな。
言語はSmalltalkだが。
987デフォルトの名無しさん:2007/11/10(土) 01:37:48
コードコンプリートで紹介されているIBMの調査だと、200行以下の場合は、
行数が少ないほど、一行あたりのバグの件数が多かったとか。

100行のサブルーチンひとつより、10行のサブルーチン10個のほうがバグが多いらしい。
988デフォルトの名無しさん:2007/11/10(土) 01:39:56
そのメトリクスに意味があるとは思えん
989デフォルトの名無しさん:2007/11/10(土) 02:13:52
あくまでも統計だな
990デフォルトの名無しさん:2007/11/10(土) 02:27:25
>>987
なんか違和感を感じたので、よーく考えてみた

10行のコードの中の1行にパグがある場合、1/10のバグになる
100行のコードの中の1行にバグがある場合、1/100のバグになる

なんとなく、違和感の原因が判った気がする...
991デフォルトの名無しさん:2007/11/10(土) 02:32:32
>>990
そういう計算だったら「200行以下のサブルーチン」なんて但し書きはなくて、単純に、
「行数が大きければ大きいほどバグが少ない」って言えばいいことになる。
992デフォルトの名無しさん:2007/11/10(土) 02:43:27
>>991
200行を超えると、今度は複雑度が増えてバグも増えるってことだろ。
993デフォルトの名無しさん:2007/11/10(土) 02:50:27
10行の関数10個書いてバグが2個出るより、100行の関数書いてバグが1個のほうがいいじゃん。
そういう話じゃなくて?
994デフォルトの名無しさん:2007/11/10(土) 02:54:52
テストファーストやればいいんだよ。
感覚的にユニットテストしやすい大きさってのが分かってくるから。
995デフォルトの名無しさん:2007/11/10(土) 02:55:02
>>991
そうじゃないだろ
200行以下のサブルーチンの場合、行数が少ないほど、バグの量が多く見えるって事じゃないの?
996デフォルトの名無しさん:2007/11/10(土) 02:57:56
>>995
関数あたりじゃなくて、行数あたりだから関係ないんじゃないの?
997デフォルトの名無しさん:2007/11/10(土) 02:59:22
埋め
998デフォルトの名無しさん:2007/11/10(土) 03:01:09
999デフォルトの名無しさん:2007/11/10(土) 03:01:13
もう、このスレ、終わりでいいんじゃね?
1000デフォルトの名無しさん:2007/11/10(土) 03:01:46
賛成
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。