アカウント名:
パスワード:
void die(e,s) int e; char *s; { substdio_putsflush(subfderr,s); _exit(e); }
とか。なんでこんなにしてまで1行にしなきゃいけないんだろう。 難読プログラムコンテストにでも出す気なのか? これ(qmail-smtpd.c)なんて
void straynewline() { out("451 See http://pobox.com/~djb/docs/smtplf.html.\r\n"); flush(); _exit(1); }
読みにくいのもそうだけどサイトのURLが変わったらどうすんのよ。 それだけでバージョンアップ? 他に気になる点は
順もさることながら、不要になった時点で評価を止めてしまうというのも大事です。 たとえば if (x1 && y) で x1 が偽の場合、if (x2 || y) で x2 が真の場合などでは、y は評価されません。
こういう仕様最近ではあたりまえですが、C言語以前では、最後まで必ず評価されてしまうものや評価されるされないが実装でバラバラなので「されてしまう」ことを前提にコーディングしなきゃいけないもの、なんてのがゴロゴロしていました。なので、この部分を明確にしていた Cという言語は私には画期的に思えたものです。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
私はプログラマです。1040 formに私の職業としてそう書いています -- Ken Thompson
qmailのソースが (スコア:3, おもしろおかしい)
ちらっと見てみたら確かにすごい!!
適当に開いてみたtcpto.cの96行目当たりから
lastwhen = (unsigned long) (unsigned char) record[11];
lastwhen = (lastwhen lastwhen = (lastwhen lastwhen = (lastwhen when = now();
プログラミング初心者の私がいうのも何なんですが
その他の例 (スコア:3, 参考になる)
例えば、qsmhook.cの
とか。なんでこんなにしてまで1行にしなきゃいけないんだろう。
難読プログラムコンテストにでも出す気なのか?
これ(qmail-smtpd.c)なんて
読みにくいのもそうだけどサイトのURLが変わったらどうすんのよ。
それだけでバージョンアップ?
他に気になる点は
--------------------
/* SHADOWFIRE */
Re:その他の例 (スコア:2, 興味深い)
if( x ) if ( y ) { ... }
って if( x && y ) { ... }
と同じじゃないんでしょうか(マクロで書くなら気をつけなきゃいけませんが)。
スタンダードではないですがある意味深いカッコがへっていいような気もするので、少なくとも「スタンダードでないからダメ」以外の理由でそんなに理に叶って
Re:その他の例 (スコア:0)
> って if( x && y ) { ... }
> と同じじゃないんでしょうか(マクロで書くなら気をつけなきゃいけませんが)。
上のコードではxの評価が必ずyの評価よりも先になります。下の場合はどちらの評価が先になるか分かりません。
Re:その他の例 (スコア:0)
if (p && p->x) { ... }
と書けないことになるじゃないですか。
Re:その他の例 (スコア:1)
>と書けないことになるじゃないですか。
C言語の場合,
結合規則(?)で「 x && y && z は, ( x && y ) && z と評価する.」とはあるけど,
「 && は,左オペランドを先に評価する.」と決まってました?
# if( x ) if( y ) { ... }
# と書けば,必ず x が先に評価されてから y が評価されるので,
# 評価の順番が明確になります.
Re:その他の例 (スコア:0)
> C言語の場合,
>結合規則(?)で「 x && y && z は, ( x && y ) && z と評価する.」とはあるけど,
>「 && は,左オペランドを先に評価する.」と決まってました?
決まっている [catnet.ne.jp]らしいですね。
まあ、私的には書き方なんてどうでもいいと思いますが。
Re:その他の例 (スコア:0)
Re:その他の例 (スコア:1)
&& || ,(カンマ) と ?:(3項演算子) は,特例か...気をつけないと.
Re:その他の例 (スコア:1)
順もさることながら、不要になった時点で評価を止めてしまうというのも大事です。 たとえば if (x1 && y) で x1 が偽の場合、if (x2 || y) で x2 が真の場合などでは、y は評価されません。
こういう仕様最近ではあたりまえですが、C言語以前では、最後まで必ず評価されてしまうものや評価されるされないが実装でバラバラなので「されてしまう」ことを前提にコーディングしなきゃいけないもの、なんてのがゴロゴロしていました。なので、この部分を明確にしていた Cという言語は私には画期的に思えたものです。