ぱっと見て「ヘタだなぁ」と思うコード その7
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/10/30(火) 03:00:12・長い関数
・深いネスト
・グローバル変数
・goto
・memset
・malloc - free
・局所ブロック
・サンプルコードのtypo
・記述スタイル
・関数・変数名
過去スレ
その6: http://pc11.2ch.net/test/read.cgi/tech/1193250955/
その5: http://pc11.2ch.net/test/read.cgi/tech/1155315371/
その4: http://pc8.2ch.net/test/read.cgi/tech/1153312202/
その3: http://pc8.2ch.net/test/read.cgi/tech/1149986051/
その2: http://pc8.2ch.net/test/read.cgi/tech/1142741989/
初代 : http://pc8.2ch.net/test/read.cgi/tech/1141867015/
0153デフォルトの名無しさん
2007/10/30(火) 17:46:37まず、256 の大きさの char 型の配列 str を "" で初期化する。
つぎに、str が 0以外 なら、str に "Hello!" をコピーし、
そうでないなら、標準出力に "error!\n" を出力する。
0154デフォルトの名無しさん
2007/10/30(火) 17:50:16strは0にならねぇよ
0155デフォルトの名無しさん
2007/10/30(火) 17:50:40まず int 型の i が 0 で初期化される。
つぎに、i が 0 以外なら i に 0 が代入され、
そうでないなら、i に 1 が代入される。
>>150
C言語において、整数の 1 や 2 の真偽を問う必要性が無い。
例えば、if文は、0と比べてどうか、という価値観で分岐しているだけであって、
真偽で分岐しているわけではない。
0156デフォルトの名無しさん
2007/10/30(火) 17:54:480157デフォルトの名無しさん
2007/10/30(火) 17:55:56もとの式が論理値を意味しているのなら、「!」を使えばよい。
もとの式が論理値を意味していないのなら、わざわざ「!」を使う必要も無い。
その意味で「わざわざ式の真偽を考える必要はないし、nonzero を true と捉える必要も無い。」
と書いた。
0158デフォルトの名無しさん
2007/10/30(火) 17:56:48論理値として期待される。整数として扱う必要性が無い。
例:
int b = (1 != 0);
0159デフォルトの名無しさん
2007/10/30(火) 17:57:020160デフォルトの名無しさん
2007/10/30(火) 17:57:03strは配列だから0になることはないね。
だけど、それはコードを書いた人に文句言ってよ。
0161デフォルトの名無しさん
2007/10/30(火) 17:58:020162デフォルトの名無しさん
2007/10/30(火) 17:59:02「文字列リテラルで初期化されているから」では?
0163デフォルトの名無しさん
2007/10/30(火) 18:00:020164デフォルトの名無しさん
2007/10/30(火) 18:05:59ISO/IEC 9899:1999 6.5.3.3 の 5 に誰も触れないところがry
0165デフォルトの名無しさん
2007/10/30(火) 18:06:33辞めようと〜の方が書きやすい。辞めようとまでは思ってないけど。
0166デフォルトの名無しさん
2007/10/30(火) 18:12:060167デフォルトの名無しさん
2007/10/30(火) 18:14:16なぜ、if文でエラーとなりコンパイルできないと答えずに、全ての設問の動作を回答したのでしょうか?
あなたの理屈で言うと、int i = 0;以外は、0以外であるが真では無いので、コンパイルされてはおかしいのでは無いでしょうか?
iは、int型であり、その値は10です
strは、str[0]のポインタであり、その値はstr[0]のアドレスです
どちらも、あなたの言う、0以外であるが真では無い物なのですが...
0168デフォルトの名無しさん
2007/10/30(火) 18:15:58ニートでしかも性格が悪いので相当他人に触れる事に飢えていると思われ
0169デフォルトの名無しさん
2007/10/30(火) 18:21:11真偽値を表している整数値は、真偽値のまま扱うべきだと言っているが。
>>149 のような書き方はC言語の仕様上、動くというだけで、やるべきではないし、
やるひつようもない。
C言語では、意味の上での真偽値は、必要とあらばいつでも整数値に格下できるというだけ。
0170デフォルトの名無しさん
2007/10/30(火) 18:25:08機能上、if文は、式が、0でないか、0と等しいか、を見るだけだから。
真偽を判定しているわけではない。
だから仕様上は動く。ただそれだけ。
0171デフォルトの名無しさん
2007/10/30(火) 18:25:120172デフォルトの名無しさん
2007/10/30(火) 18:26:20このスレの人達はそうするらしいよ。
理由は「コンパイルが通るから」だってさ。
動きゃ味噌も糞もいっしょなんだよ。
0173デフォルトの名無しさん
2007/10/30(火) 18:28:21それは貴方の主張は間違っていると認めると言うことでしょうか?
それとも、全てのコンパイラはISOの規格を正しく実装していないと言うことでしょうか?
0174デフォルトの名無しさん
2007/10/30(火) 18:31:05単に動けばそれで良い、というなら、
「ヘタだなぁ」と思うコードも、
コンパイルはとおるのだろうし、一応は動くのだろうから、
このスレの趣旨と反します。
ここは、コンパイル出来る出来ないを議論する場所では有りません。
0175KY
2007/10/30(火) 18:32:250176デフォルトの名無しさん
2007/10/30(火) 18:32:490177デフォルトの名無しさん
2007/10/30(火) 18:33:410178デフォルトの名無しさん
2007/10/30(火) 18:37:34現在、議題は、「真は0以外」で「0以外は真とは限らない」と言う主張は正しいのかどうかです
ですので、コンパイルエラーがでるでないでは無く
「真は0以外」で「0以外は真とは限らない」と言うのを証明して貰わなければならないのですが
少なくとも現時点の実装では、「0以外は真」として動作しているので、その見解を聞きたいのです
0179デフォルトの名無しさん
2007/10/30(火) 18:40:050180デフォルトの名無しさん
2007/10/30(火) 18:42:15>「真は0以外」
>「0以外は真」
規格上これらの両方が成立すると思ってる?
前者のみが成立すると思ってる?
後者のみが成立すると思ってる?
どちらも成立しないと思ってる?
0181デフォルトの名無しさん
2007/10/30(火) 18:44:08>「0以外は真」として動作している
動作していません。
if 文は 0でないか 0と等しいか、で分岐しているだけです。
真偽を評価しているわけでは有りません。
if 文に意味を持たせるのは、プログラマの役目です。
そうでなければ、if 文は単に 0でないか 0と等しいか で機械的に分岐するだけです。
0182デフォルトの名無しさん
2007/10/30(火) 18:44:23私は>>136が正しいと思います
0183デフォルトの名無しさん
2007/10/30(火) 18:45:420184デフォルトの名無しさん
2007/10/30(火) 18:46:56>>136 が 数学的に根拠が無いということは >>141 で示しました。
命題が正しいからといって、常にその逆が成り立つとは限りません。
0185デフォルトの名無しさん
2007/10/30(火) 18:48:15ifでの分岐の作動原理に、真偽がどうの、を期待するのが気に食わないと?
intで代用する文化の延長で、ifの動作原理を抽象化して、
それを真偽だとしてあつかう文化が気に食わないと?
0186デフォルトの名無しさん
2007/10/30(火) 18:51:00C++かdelphi使えよ
0187デフォルトの名無しさん
2007/10/30(火) 18:55:21>ifでの分岐の作動原理に、真偽がどうの、を期待するのが気に食わないと?
期待するのが正しい。
だから >>149 のような書き方をするのは良くない。
ただ、仕様上は、if 文は 0でないか、0と等しいか、で機械的に分岐するだけだから、
「真偽がどうの、を期待した書き方」、でなくても動いてしまう。
でもそういうの良くないよね、と。
0188デフォルトの名無しさん
2007/10/30(火) 18:55:27なぁおまいら、↑がfalseになるのはどう考えたら良い?
0189デフォルトの名無しさん
2007/10/30(火) 18:56:36>>141ではなにも証明されていません
「真はzero以外である」と言う命題において
「1であれば、真である」が、「真であれば、1である」というのであれば成り立ちません
「真はzero以外である」ので、ある時には「真は10である」かも知れないし、「真は'a'である」かもしれません
0190デフォルトの名無しさん
2007/10/30(火) 18:57:18環境にもよるのかもしれんが、シンプル。
!0が1になる。ので 2 == 1 はfalse。
0191デフォルトの名無しさん
2007/10/30(火) 19:01:12>「真はzero以外である」と言う命題において
>「1であれば、真である」が、「真であれば、1である」というのであれば成り立ちません
何言ってるの?
だれか一人でも、真であれば1である、なんて言ったのか?
真であればzero以外である、とは言ったが、1であるなんて限定した言い方は誰もしてないぞ。
0192デフォルトの名無しさん
2007/10/30(火) 19:01:31えっと、すまん携帯からなんで短く書きすぎた。
2は0以外で、!0は真だけど、異なるって言って良いの?って質問。
0193デフォルトの名無しさん
2007/10/30(火) 19:04:220194デフォルトの名無しさん
2007/10/30(火) 19:07:28話が噛み合って無いんじゃないかと。
プログラマはループが好きだしね。
0195デフォルトの名無しさん
2007/10/30(火) 19:07:29C言語の仕様上、真偽は本来「無い」。
論理型は整数型で代用されている。(根拠 >>34)
単なる整数値を真偽値として取り扱うのは、プログラマの責任。
0196デフォルトの名無しさん
2007/10/30(火) 19:08:58偽は0、真は0以外、で代用するが、
0が偽、0以外が真、は成り立たない。
0197デフォルトの名無しさん
2007/10/30(火) 19:11:44>「真は0以外」
>「0以外は真」
4つのうちどれ?
・規格上これらの両方が成立する
・前者のみが成立する
・後者のみが成立する
・どちらも成立しない
0198デフォルトの名無しさん
2007/10/30(火) 19:14:41しかし、意味の上での真偽値は有る。
意味の上での真偽値は、いつでも整数値に格下げすることができる。
逆に、整数値を、いつでも意味の上での真偽値として使っているとは限らない。
0199デフォルトの名無しさん
2007/10/30(火) 19:16:30>>182 は そうとう頭悪いからそんな難しいこと聞いてもわからないって。
突然、>>189 みたいな意味不明なことを言いだすやつだぜ。
質問の意味もわかってないんじゃね。
0200デフォルトの名無しさん
2007/10/30(火) 19:18:08ムカつかせるような書き方は自重しようぜ。
論破してもどうせ皆名無しだし、対人ゲームみたいなもんだ。
0201デフォルトの名無しさん
2007/10/30(火) 19:22:30かなり下手だと思う。
0202デフォルトの名無しさん
2007/10/30(火) 19:29:00>むしろ、propetyとmethodの単純な二元論で設計しようとする場合の弊害を気にすべきです。
C++の場合、その単純な二元論で設計しない弊害の方が、はるかにでかい気がするんだが・・・
0203デフォルトの名無しさん
2007/10/30(火) 19:29:21具体的な1要素としての「0以外」で話変わってくるんじゃね?
0204デフォルトの名無しさん
2007/10/30(火) 19:35:08同意。
あと逆にキャッチだけして無かったことにするやつ。
状況に応じてってのは分かるけど、
キャッチしてfalse返すだけとか、ちょっと待てって思う。
0205デフォルトの名無しさん
2007/10/30(火) 19:35:25それでは、「真はzero以外である」が成立しないだろ
zero以外が真でなければ、真は何なのか?
そんなの誰にも答えられないだろ
「真はzero以外である」と言う命題において
「1であれば真である」は成り立つ
「zeroであれば真ではない」も成り立つ
「真でなければzeroである」も成り立つ
しかし、
「真であれば1である」は成り立たない
同じく「真はzero以外である」と言う命題において
「コップであれば真である」は成り立つ
「zeroであれば真ではない」も成り立つ
「真でなければzeroである」も成り立つ
しかし、
「真であればコップである」は成り立たない
0206デフォルトの名無しさん
2007/10/30(火) 19:36:580207デフォルトの名無しさん
2007/10/30(火) 19:39:110208デフォルトの名無しさん
2007/10/30(火) 19:40:30「0以外」は集合です。
もし、具体的な1要素として「0以外」を見るのなら、
範囲の集合 S = { (0以外), (1以上3以下), (-3以外), (4だけ) }
といった見方も有ります。
しかし、0以外、という言葉が、
「0以外に含まれている具体的な1要素」
を表すことはありません。
02090
2007/10/30(火) 19:46:390210デフォルトの名無しさん
2007/10/30(火) 19:46:491行目の成立ってのをkwsk
C言語において「真はzero以外である」ってのは定義なんじゃねーの?
証明したりする類のことじゃない気がするんだが
0211210
2007/10/30(火) 19:48:52205だけ読んで理解しようとしてた
0212デフォルトの名無しさん
2007/10/30(火) 19:49:42まず、AであればBであるとき、
BであればAであるとは限らない、ということを理解すべき。
命題: 「真はzero以外である」、が成立するために、
逆: 「zero以外が真である」、が成立する必要は無い。
裏: 「真でなければzeroである」、も成立する必要は無い。
成立する必要があるのは、
対偶: 「zeroであれば真以外である」、だけ。
>「真はzero以外である」と言う命題において
>「1であれば真である」は成り立つ
なりたたない。
命題は、「真であればzero以外である」、と言っているだけで、
1 であれば 真 である、とは一言も言っていない。
1 は単なる 「1」 の意味かもしれない。
0213デフォルトの名無しさん
2007/10/30(火) 19:50:56こういうのは自分的にはOK。
public int safeInt(String str, int errorValue){
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
return errorValue;
}
}
キャッチして無かったことにするのはヘタでなくてバグだと思う。
0214デフォルトの名無しさん
2007/10/30(火) 19:51:49そうだよ
C言語に於いては「真はzero以外」であり、「zero以外なら真」だよ
特定の人だけ、「真はzero以外」だが「zero以外なら真」とは限らないと喚き散らしてるんだよ
もうね、zero以外であれば、文字型でも、整数でも、浮動小数点でも、真だって事が理解できないらしいんだ
だから、>>205みたいな証明じみた事をしなければならないのさ
0215デフォルトの名無しさん
2007/10/30(火) 19:56:51>C言語に於いては「真はzero以外」であり、「zero以外なら真」だよ
Cに限って言えばそれは無い。
zero以外の整数値を、真以外の意味で使うこともある。
だから「zero以外→真」は常に成り立たない。
数学上、常に成り立たつとは限らない命題は偽である。
>もうね、zero以外であれば、文字型でも、整数でも、浮動小数点でも、真
C言語には元々真も偽もない。
意味の上だけの真や偽が浮遊しているに過ぎない。
0216デフォルトの名無しさん
2007/10/30(火) 19:57:04特定の人とは要するにキチガイでお邪魔虫だろ
だからそういう人は無視すればいいんだよ
0217デフォルトの名無しさん
2007/10/30(火) 19:59:04何言ってんの?
評価は真だって話だろ?運用の話なんてしてねえよ。
0218デフォルトの名無しさん
2007/10/30(火) 19:59:081は単なる「1」かも知れないが、それは、zeroでは無い
つまり、「真はzero以外」であるならば、「1はzeroでは無いから真である」
そして、君が言う対偶というのは、「真であれば1である」と言うのが対偶だ
けして、命題を反対から読むことではない
0219デフォルトの名無しさん
2007/10/30(火) 20:02:19ああ、君は真偽以外の話もしてたの?
0220デフォルトの名無しさん
2007/10/30(火) 20:02:20いい加減に「逆は必ずしも真ならず」って理解してくれませんか?
あなた頭悪すぎですよ。
0221デフォルトの名無しさん
2007/10/30(火) 20:07:39上で書いた状況に応じてってのがまさにそれのことw
それは俺もOK。
>バグ
そういう仕様のメソッド、と言われると中々ね・・・。
最低でもログにスタックトレース出してくれないと泣ける。
0222デフォルトの名無しさん
2007/10/30(火) 20:09:370223デフォルトの名無しさん
2007/10/30(火) 20:10:18>1は単なる「1」かも知れないが、それは、zeroでは無い
↑これは正しい
>つまり、「真はzero以外」であるならば、「1はzeroでは無いから真である」
↑これはおかしい。
↑命題は 「真→zero以外」 とは言っているが、決して 「zero以外→真」 とは言っていない。
↑よって、「真はzero以外」 ということを根拠に、「1はzeroでは無いから真である」
↑ということを言うことは出来ない。
>そして、君が言う対偶というのは、「真であれば1である」と言うのが対偶だ
>けして、命題を反対から読むことではない
「真→zero以外」 の対偶は
「zero→真以外」 です。
だいたい「1」なんて言葉は一言も命題に使われていない。どっから出てきたのか。
勝手に数学の定義を変えないで。
0224デフォルトの名無しさん
2007/10/30(火) 20:10:59次のようなソースコードを見かけてしまった。
CHoge::CHoge()
{
m_hFileHandle = NULL;
}
void CHoge::Shori()
{
Close();
m_hFileHandle = CreateFile(……);
//処理
}
void CHoge::Close()
{
if (m_hFileHandle != NULL)
{
CloseHandle(m_hFileHandle);
m_hFileHandle = NULL;
}
}
これって、どう思う?
0225デフォルトの名無しさん
2007/10/30(火) 20:12:14ただ噛み合って無いって感じ。
それと、キチガイとか頭悪いとか言い出すのは負けだと思った方がいい。
0226デフォルトの名無しさん
2007/10/30(火) 20:13:18どちらも、ってのは両者の言い分のこと。
0227デフォルトの名無しさん
2007/10/30(火) 20:13:47規格上これは正しい?
0228デフォルトの名無しさん
2007/10/30(火) 20:14:14整数を評価した結果は「整数」でしかありません。
if 文は式が 0でないか、0と等しいか、に基づいて、機械的に分岐するだけです。
0229デフォルトの名無しさん
2007/10/30(火) 20:14:27いや、基地外にははっきりと基地外と言った方がいい
だって全然議論にもなってないじゃんこれ
0230デフォルトの名無しさん
2007/10/30(火) 20:14:44を偽と評価する事があるんだったら見てみたい。
0231デフォルトの名無しさん
2007/10/30(火) 20:15:50↑
↓←← →
→ → ↓
0232デフォルトの名無しさん
2007/10/30(火) 20:16:32真理値を意味する整数型を算術演算したり数値を意味する整数型を論理演算するのはヘタ。
これでいいじゃん。
0233デフォルトの名無しさん
2007/10/30(火) 20:17:18>>34 を 参照してください。
0234デフォルトの名無しさん
2007/10/30(火) 20:17:320235デフォルトの名無しさん
2007/10/30(火) 20:18:180236デフォルトの名無しさん
2007/10/30(火) 20:18:19君誰?
0237デフォルトの名無しさん
2007/10/30(火) 20:19:48↓はどういう意味?
> 同じく「真はzero以外である」と言う命題において
> 「コップであれば真である」は成り立つ
> 「zeroであれば真ではない」も成り立つ
> 「真でなければzeroである」も成り立つ
> しかし、
> 「真であればコップである」は成り立たない
「コップであれば真である」は成り立つ
って何よ。つーかコップがどうしたの? どっから出てきたの?
0238デフォルトの名無しさん
2007/10/30(火) 20:20:240239デフォルトの名無しさん
2007/10/30(火) 20:20:42いつもの人
0240デフォルトの名無しさん
2007/10/30(火) 20:21:22ヨロシクー
0241デフォルトの名無しさん
2007/10/30(火) 20:22:02屁理屈そのものだな
詭弁法だよ
詭弁の特徴のガイドライン
6:一見関係ありそうで関係ない話を始める
0242デフォルトの名無しさん
2007/10/30(火) 20:22:38で、コップは真なのですか?
コップはコップでしょ。
> 「コップであれば真である」は成り立つ
とか自分で書いてて、変だなぁとか思わなかったの?
0243デフォルトの名無しさん
2007/10/30(火) 20:22:49展開がおかしくないか?
まず「真はヤカン以外である」があって
「コップであれば真である」
が
「真であればコップである」とは限らない
というのなら解るんだけど。
0244デフォルトの名無しさん
2007/10/30(火) 20:24:48なんで俺に言ってるの?
俺は書いてないよ
書いた人に言ってね
0245デフォルトの名無しさん
2007/10/30(火) 20:26:36GOD is dead.
∴John Lennon is GOD.
0246デフォルトの名無しさん
2007/10/30(火) 20:26:45俺はよくそれやる。
でも俺自身は再オープンするコードは書かないw
あと、初期化子使った方が良い、というかCloseHandleするauto_ptr的なハンドル保持クラスを使う。
0247デフォルトの名無しさん
2007/10/30(火) 20:27:50読み飛ばしてたごめん。
if 文は 真偽を評価するわけではない。
ただ、0でないか、0と等しいか、で分岐するだけ。
>if( 0以外 )
は 0 と等しくないので、以降に続くブロックは実行される。
結局、0以外が「真」と評価された、かどうかまでは判らない。
C言語には元々真偽はなく、整数で代用されている。
C言語で言うところの真偽は、意味上のものでしかない。
0248デフォルトの名無しさん
2007/10/30(火) 20:29:07ごめんごめん、もうだれがだれだかわけわかめ
0249デフォルトの名無しさん
2007/10/30(火) 20:30:01そんなこと解りきっとるわ!
if(){
//真
}
else{
//偽
}
だって話してたんだろ今まで!!
0250デフォルトの名無しさん
2007/10/30(火) 20:30:220251デフォルトの名無しさん
2007/10/30(火) 20:32:49お疲れ
0252デフォルトの名無しさん
2007/10/30(火) 20:34:21が絡んでたのか。このぐっちゃりした議論の原因がわかった。
■ このスレッドは過去ログ倉庫に格納されています