while(1)をfor(;;)って書くやつ

このエントリーをはてなブックマークに追加
354仕様書無しさん:2009/01/07(水) 10:59:33
ふと思ったのだが、4項以上の演算子ってどんなんだろうか?
355仕様書無しさん:2009/01/07(水) 13:30:07
>>351 が気持ち悪いのは同意だが
>>352 はもっと気持ち悪い。perlみたい。
てか>>351ってバグってねえか?
return p ? p->foo() : 0;
ならわかるが。
気持ち悪い書き方をした報いが早速出てるって訳だ。
356仕様書無しさん:2009/01/07(水) 13:33:47
>>355
すまんw ばぐってる、書いた直後に赤面した。
returnを一行にしたいために三項演算子使うの、
俺にとっては少しも気持ち悪くない。
357仕様書無しさん:2009/01/07(水) 13:34:50
if p
return p->foo()
else
return 0;

return が 2 つに分かれるのがよくない。

あるいは、

int r;
if p
r = p->foo()
else
r = 0;
return r;

変数が増える。

冗長であることを気持ち悪いと思わない奴は好きにしな、って感じ。
358仕様書無しさん:2009/01/07(水) 15:34:03
>>355
>>352 は C の伝統的、かつまっとうな記述。

>>357
>return が 2 つに分かれるのがよくない。
かどうかは各自あるいは各職場にて判断汁。
359仕様書無しさん:2009/01/07(水) 17:13:42
>>352 は例えば

while (p && p->foo()) {
 ...

のように使えるしな。PerlはCからこれを引き継いだだけ。
360仕様書無しさん:2009/01/07(水) 21:12:28
>>352
351と352はかなり違うだろ。
評価結果を真偽判定に利用する場合は同じだけど。
361仕様書無しさん:2009/01/07(水) 21:33:04
351の書き方は、難しくは無いが珍しいと思われ。
362仕様書無しさん:2009/01/08(木) 07:13:56
>>360
同じだべ?&&の定義参照。
363仕様書無しさん:2009/01/08(木) 09:06:28
>>362
Cの話でいいんだよな?
p->foo()の戻り値がintでない場合、?:演算子の
戻り値はその型になるだろ。
ところが&&だったらかならずint。
364仕様書無しさん:2009/01/17(土) 05:32:45
>>363
bool じゃなきゃ駄目だろ、>>360 が書いた通りだよ
365仕様書無しさん:2009/01/17(土) 14:27:57
Cでboolだってwww
366葉猫 ◆Jz.SaKuRaM :2009/01/18(日) 13:35:01
つ _Bool
367仕様書無しさん:2009/01/18(日) 13:46:44
>>365
なんかおかしいか?
368仕様書無しさん:2009/01/18(日) 14:22:50
このアホコテまだ生きてたのか
369仕様書無しさん:2009/01/22(木) 17:51:43
>>367
カスは死んだら?
370仕様書無しさん:2009/04/10(金) 14:23:30
int foo(void){return 2;}

struct MyStruct{
int(*foo)()
};

struct MyStruct t, *p;
t.foo = foo;
p = &t;

のように定義されてるとき、
p?p->foo():0は2
p && p->foo()は1
になるはず。
(Cにおいて、真偽値を返す演算子は真のとき1, 偽のとき0を返す)
371仕様書無しさん:2009/06/29(月) 02:03:10
超亀なので書くのも気が引けるが
p && p->foo();
って、pが0のときp->foo()ですっ飛ぶだろ
372仕様書無しさん:2009/06/29(月) 02:52:19
>>371
短絡評価って知ってる?
373仕様書無しさん:2009/06/29(月) 04:09:40
>超亀なので書くのも気が引けるが

別の意味でやめておくべきだったな。
374仕様書無しさん:2009/06/29(月) 11:13:03
>>371
アイタタタタ・・・・
375仕様書無しさん:2009/06/29(月) 13:33:39
昔、言語仕様とかコンパイラオプションとか壮大な議論になったような記憶がないでもない
376仕様書無しさん:2009/06/29(月) 21:24:09
放置スレなのに突っ込み早いな
短絡評価って名前は知らなかった。
しかも&&は右から評価すると思ってた。
やべー
377仕様書無しさん:2009/06/29(月) 23:08:12
msのコンパイラは右から、
gccとかは左から。

だっけ?
VBは問答無用だけどな。
378仕様書無しさん:2009/06/30(火) 00:03:36
それが本当だとしたらおそろしい規格の無視だな。
379仕様書無しさん:2009/06/30(火) 06:12:33
演算子の評価純度と、
関数の引数の評価順序を
ごっちゃにしちゃう奴っているよね
380仕様書無しさん:2009/06/30(火) 19:07:43
>>379
それだったらごっちゃでおk。w

評価順とか結合規則とか優先順位とか、
ごっちゃにしちゃう奴っているよね。

381仕様書無しさん:2009/06/30(火) 19:19:23
ていうか、Cの演算子のなかで && と || が特別。
382仕様書無しさん:2009/07/01(水) 18:17:01
>>381
つ ?:
383仕様書無しさん:2010/05/07(金) 17:58:08
C++だと論理演算子やビット演算子を上書きできてデフォルトの演算子の優先順が適用されない罠があるけどな。
こういうのがC++の嫌われる一因だ。
384仕様書無しさん:2010/05/07(金) 20:25:51
ラベルとgotoを使うのが一番スマートだと思うのだが。
gotoは絶対に使っちゃ行けない教の人でなければ。
385仕様書無しさん:2010/05/07(金) 20:49:34
>>383
それは優先順じゃなくて短絡評価と言う
386仕様書無しさん:2010/05/08(土) 00:47:55
public static void main(String[] args) {
try {
main(null);
} catch (StackOverflowError e) {
main(null);
}
}
387仕様書無しさん:2010/05/08(土) 22:33:49
三項演算子、よく使うなぁ。

int i = 0;
if (ex == 0)
{
i = 100;
}
else
{
i = 1000;
}

って書くと、どこかでiが0の可能性があるのかな?、と心にひっかかる。

int i = (ex == 0) ? 100 : 1000;
これだとiは100か1000しか入らないという安心感がある。個人的に。
みんな口にはしてないけど見辛いのかなぁ。
388仕様書無しさん:2010/05/09(日) 09:12:56
じゃあこう書けばいいじゃない。
int i = 100;
if(ex) i = 1000;
389仕様書無しさん:2010/05/09(日) 11:40:57
というか 387 は代入した 0 が使われていないと警告が出るだろ。
i を宣言時に初期化しなければ、その不安は発生せず、未初期化で使われていないかコンパイラの警告をチェックすれば済む。
まあ俺は i を const で宣言して三項演算子使うけどね。

> みんな口にはしてないけど見辛いのかなぁ。
意味不明。
390仕様書無しさん:2010/05/09(日) 13:10:46
constは使うな。
391仕様書無しさん:2010/05/10(月) 18:09:22
>>388
確かにそういうなんだけど、そう書けない場合もあって。

class base {};
class A : public base {};
class B : public base {};

base p = (ex == 0) ? new A() : new B();

みたいな。
まぁ使いたくないワケじゃなく、容認してもらいたいだけなんだ。
ただ、どうしても使ってはいけない理由みたいのがあるなら
自粛しなきゃなぁという気持ち。
392仕様書無しさん:2010/05/12(水) 10:13:22
while('-')

for(;;)派だけどな
393仕様書無しさん:2010/06/06(日) 22:20:59
while(0==0)
394 忍法帖【Lv=9,xxxP】 :2011/04/30(土) 00:25:55.80
while(true)
だけどあんまりループは使わんな
395仕様書無しさん:2011/05/19(木) 21:51:10.74
for(;;)のほうが早いんじゃないの?
396仕様書無しさん:2011/05/20(金) 08:40:15.74
今時のコンパイラなら間違いなく同じコードを吐く、はず。
397仕様書無しさん:2011/05/20(金) 11:12:58.30
warning C4127: 条件式が定数です。
が出た
398仕様書無しさん:2011/06/26(日) 05:20:12.59
もし、真が0の環境があったらと考えると、for(;;)の方が落ち着く。
あとwhileで!0じゃなく、1と書かれるのがなんか嫌。
5000だろうが0以外なら何使ってもいいのに。
399仕様書無しさん:2011/06/26(日) 08:29:48.02
それは規格的に、C言語ではありませんが。
400仕様書無しさん:2012/03/17(土) 08:10:07.23
while(!0x0)
401仕様書無しさん:2012/04/15(日) 04:47:33.34
while(1)ってpointer->memberを
pointer[0].memberって書いてるのと同じ感じでキモイ
402仕様書無しさん:2013/05/05(日) 13:51:06.96
while (0==0)
403仕様書無しさん
いつだったかマ板のどっかのスレで
for(;;)を使って首吊りAA書いたのがいたっけな