2011年10月1期プログラム今までに見たソースコードで一番感動したのは deux
TOP カテ一覧 スレ一覧 削除依頼 ▼
・ 次のスレ
アゼルバイジャン出身だけど何か質問ある?
2010年1月 人気プログラミング言語ランキング
プログラミングなんてできないのに・・・
ブートストラッピングでコンパイラを作ろう
今までに見たソースコードで一番感動したのは deux
- 1 :10/01/12 〜 最終レス :11/11/19
- やっぱりこれです
while(*src++ = *dst++) ;
・ポインタの型によってインクリメントの適量を判断して加算してくれる点
・行末の ;
・終了判定
無駄も過剰もなくって感じで好きです
前スレ
http://pc12.2ch.net/test/read.cgi/tech/1037458703/
- 2 :
- srcとdstが逆なので0点
- 3 :
- 演算子のオーバーロードでちゃんと
srcからdstに代入されるようになっているから
- 4 :
- >>1
要するに stos[b/w/d] だろ
- 5 :
- >>3
ほんとC++は何でもありだな
- 6 :
- 過保護ってやつか
- 7 :
- >>3
左から右に代入に変更してあるってことか?アホじゃないのか?
それだったら -> を左から右への代入ってことにすればいいんじゃないのか?
- 8 :
- こういうので感動できないのは、俺が年だからかなぁ。 こういう書き方出来ると分かっても、使わないなぁ。
- 9 :
- 昔は再帰の書き方で感動したこともあったけど
今は別にって感じだな
枯れちまって情熱がもうないのかもしれん
- 10 :
- int main()
{
return main();
}
- 11 :
- これ有名な技法でしょ。しかも代入方向間違ってるし。
- 12 :
- >>8
Cは実質アセンブラなんだから
movem (a0)+, (a1)+
見たいな事は出来ないと困る
- 13 :
- フラグが使えないのにアセンブラと言うのは否
- 14 :
- それ、なんか理屈が変だよ。
- 15 :
- ソースって訳じゃないんだけど
感動したものにこんなのがある
SQLで覆面算を解く
ttp://miko.org/~naruto/Artifact/MASKSQL.html
- 16 :
- 呼び出し元でバッファサイズと終了条件の設定を保証しないといけないから、
これだけだと危険なコードだよねぇ
- 17 :
- 値交換っててっきり一時変数が必要かと思ってたらそうでもなかったんだね
x = x + y;
y = x - y;
x = x - y;
- 18 :
- そうですね
それでうまくいく範囲の値を使っている限りはね
- 19 :
- >>12
アセンブラやってた人間から見たら当たり前だよな
Cで同じことが出来ると言われてもあっそうとしか
- 20 :
- >>1
これってループを抜ける保証があるの?
一見ないように見えるんだけど。
- 21 :
- >>17
http://codepad.org/72Hm2T8T
うまくいかないじゃん。
- 22 :
- >>1
終了条件を満たした直後に2つのポインタがインクリメントされてしまうのが
無駄なような気がしていたあの頃が懐かしい
- 23 :
- >>21
おいおい、doubleなのに%dとか素で言ってるのかw
- 24 :
- >>23
ごめん。素で言っちゃったw
- 25 :
- %eにしたらうまく出来てたwスマソw
http://codepad.org/pTLkz2cx
- 26 :
- 16桁くらい差をつけてようやく反例ができた
http://codepad.org/DMn3DjZT
- 27 :
- >>26
まあ、桁あふれすれば当然そうなるわな
>>17の方法だと、有効桁数が1bit分減るってことだろ
- 28 :
- xor を使った値交換は超有名かと思ってたけど、知らない人もいるのかね。
>>17 みたいな劣化版を今更発見されても・・・ねえ
- 29 :
- XORが使えない環境もあるのだよ
SQLとか
- 30 :
- xor使って中央値を求めるコードは昔見て感動した
こんな奴。
int median(int x,int y,int z){
return max(x,y)^max(y,z)^max(z,x);
}
- 31 :
- ADD 90H
DAA
ADC 40H
DAA
これ考えたやつの頭はどうかしてる。
- 32 :
- a = max(x,y)
b = min(x,y)
z = a*a - b + 2 * y
という式において、x, y と zの関係を表にすると、以下のように
zが正方形を規則正しく埋めるような形に並ぶ。
00 01 04 09
03 02 05 10
08 07 06 11
15 14 13 12
用途:
x,yの上限が動的に増える2次元配列を、
素のvetorに無理矢理突っ込むのに使ったり…
- 33 :
- >>28
誰が知らないと言ってるの?
- 34 :
- 値の交換なんて高々数値1個分のメモリがあればできるのにと思ってたけど、
ROM が数十キロバイトもあるのに RAM が数百バイトなんてマイコンも今時あるんだな。
そら有用だわ。
- 35 :
- xorだと整数型にしか使えないのでは?
- 36 :
- すまん、すでに頭がアセンブラオンリーになってた。w
- 37 :
- Dim ac(10) As Class1
Public Sub Test()
Dim c As New Class1
Dim i As Integer
For i = 0 To 10
Set c = Nothing
Set ac(i) = c
Next i
End Sub
- 38 :
- >>32
00 01 03 06 10
02 04 07 11
05 08 12
09 13
14
こう並べると条件分岐のない式になる。データの種類によってはこれも便利。
- 39 :
- おっと、式を忘れていた。
z=(x+y)^2/2+(x+y)/2+y
- 40 :
- >>1のコードの意味を教えてくれ。構造体のコピー?
- 41 :
- 違う。配列のコピー?よくわからんコードには解説もつけてくれるとありがたい。
- 42 :
- >>40
ゼロターミネイティッドな文字列のコピー
または、偽と可換な番兵付きのコンテナのコピー
- 43 :
- 文字列のコピーじゃないかね
文字列の終端には\0があるからそれでループが終わる
K&Rとかに出てきそうな感じ
しかし、>>1って未定義じゃないんだろうか
初級C言語Q&Aの
二つの副作用完了点の間に、オブジェクトの値を2回以上変更している場合、
又は変更した後で新しい値を得ること以外の目的でそのオブジェクトをアク セスしている場合
詳しくないのでわからんけど
- 44 :
- >>43
未定義になるのは、「同一の」オブジェクトの値を二回以上変更した場合な
- 45 :
- 把握した。
つまり、このコード自体に意味はないが
while((*src)++ = *dst++)
だったら未定義ということだな
- 46 :
- >>45
把握してない。w
- 47 :
- ここまで何もかも間違っているといっそすがすがしいなw
- 48 :
- >>45
未定義じゃ困るだろ。
右辺値に代入するコードがエラーにならなかったら、みんなC/C++捨てるよ。
- 49 :
- >>48
把握してない。w
- 50 :
- ほっしゅ
- 51 :
- 馬鹿ばっか。w
- 52 :
- >>1見てわからんとか、Cの初級者以下じゃないか。
ム板ってこんなに程度が低くなってたのか。
- 53 :
- >>2
warosu
- 54 :
- >>1
デバックしにくいダメコードだな
- 55 :
- まさかの1年
- 56 :
- お
- 57 :
- だれか>>31教えてください。
- 58 :
- どこかのスレでみたこれ。
/*
ここに処理
//*/
最初の/*を//*にすればどーたらこーたら
- 59 :
- #if 0
#endif
なら感動した
- 60 :
- >>58
これ確実なの?未定義っぽいけど…。
- 61 :
- >>60
確実じゃないの?
場合によるけど。
/*例1
/*コメントのネストはNG*/
//*/
/*例2
//このコメントはネストしてもOK
//*/
/*例3
//*//この状態はNG
ようはコンパイラが/*を見つけたら*/がくるまでコメントと見なす機能と//のコメントを上手く使ってるという事で。
- 62 :11/11/19
- うっ
TOP カテ一覧 スレ一覧 削除依頼 ▲
・ 次のスレ
アゼルバイジャン出身だけど何か質問ある?
2010年1月 人気プログラミング言語ランキング
プログラミングなんてできないのに・・・
ブートストラッピングでコンパイラを作ろう