今までに見たソースコードで一番感動したのは deux

■ このスレッドは過去ログ倉庫に格納されています
2010/01/12(火) 23:23:19
やっぱりこれです
while(*src++ = *dst++) ;
・ポインタの型によってインクリメントの適量を判断して加算してくれる点
・行末の ;
・終了判定
無駄も過剰もなくって感じで好きです

前スレ
http://pc12.2ch.net/test/read.cgi/tech/1037458703/
2010/01/12(火) 23:26:20
srcとdstが逆なので0点
2010/01/12(火) 23:27:43
演算子のオーバーロードでちゃんと
srcからdstに代入されるようになっているから
4デフォルトの名無しさん
垢版 |
2010/01/12(火) 23:29:39
>>1
要するに stos[b/w/d] だろ
2010/01/12(火) 23:44:16
>>3
ほんとC++は何でもありだな
2010/01/13(水) 02:01:36
過保護ってやつか
7デフォルトの名無しさん
垢版 |
2010/01/13(水) 06:56:38
>>3
左から右に代入に変更してあるってことか?アホじゃないのか?
それだったら -> を左から右への代入ってことにすればいいんじゃないのか?
2010/01/13(水) 10:15:37
こういうので感動できないのは、俺が年だからかなぁ。 こういう書き方出来ると分かっても、使わないなぁ。
9デフォルトの名無しさん
垢版 |
2010/01/13(水) 12:04:53
昔は再帰の書き方で感動したこともあったけど
今は別にって感じだな
枯れちまって情熱がもうないのかもしれん
2010/01/13(水) 12:09:23
int main()
{
return main();
}
2010/01/13(水) 12:20:51
これ有名な技法でしょ。しかも代入方向間違ってるし。
2010/01/13(水) 12:41:49
>>8
Cは実質アセンブラなんだから
movem (a0)+, (a1)+
見たいな事は出来ないと困る
2010/01/13(水) 12:46:40
フラグが使えないのにアセンブラと言うのは否
2010/01/13(水) 12:47:38
それ、なんか理屈が変だよ。
2010/01/13(水) 13:04:55
ソースって訳じゃないんだけど
感動したものにこんなのがある

SQLで覆面算を解く
ttp://miko.org/~naruto/Artifact/MASKSQL.html
2010/01/13(水) 14:18:44
呼び出し元でバッファサイズと終了条件の設定を保証しないといけないから、
これだけだと危険なコードだよねぇ
2010/01/13(水) 17:47:19
値交換っててっきり一時変数が必要かと思ってたらそうでもなかったんだね

x = x + y;
y = x - y;
x = x - y;
2010/01/13(水) 17:55:28
そうですね
それでうまくいく範囲の値を使っている限りはね
2010/01/13(水) 18:28:37
>>12
アセンブラやってた人間から見たら当たり前だよな
Cで同じことが出来ると言われてもあっそうとしか
2010/01/13(水) 19:23:16
>>1
これってループを抜ける保証があるの?
一見ないように見えるんだけど。
2010/01/13(水) 19:24:31
>>17
http://codepad.org/72Hm2T8T
うまくいかないじゃん。
2010/01/13(水) 19:26:56
>>1
終了条件を満たした直後に2つのポインタがインクリメントされてしまうのが
無駄なような気がしていたあの頃が懐かしい
2010/01/14(木) 14:07:54
>>21
おいおい、doubleなのに%dとか素で言ってるのかw
2010/01/14(木) 14:25:56
>>23
ごめん。素で言っちゃったw
2010/01/14(木) 14:29:11
%eにしたらうまく出来てたwスマソw
http://codepad.org/pTLkz2cx
2010/01/14(木) 14:32:10
16桁くらい差をつけてようやく反例ができた
http://codepad.org/DMn3DjZT
2010/01/14(木) 14:45:26
>>26
まあ、桁あふれすれば当然そうなるわな
>>17の方法だと、有効桁数が1bit分減るってことだろ
2010/01/14(木) 22:12:39
xor を使った値交換は超有名かと思ってたけど、知らない人もいるのかね。
>>17 みたいな劣化版を今更発見されても・・・ねえ
2010/01/14(木) 23:31:37
XORが使えない環境もあるのだよ
SQLとか
2010/01/15(金) 00:50:13
xor使って中央値を求めるコードは昔見て感動した
こんな奴。

int median(int x,int y,int z){
    return max(x,y)^max(y,z)^max(z,x);
}
2010/01/15(金) 02:03:40
ADD  90H
DAA
ADC  40H
DAA

これ考えたやつの頭はどうかしてる。
2010/01/15(金) 02:20:01
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に無理矢理突っ込むのに使ったり…
2010/01/15(金) 06:16:22
>>28
誰が知らないと言ってるの?
2010/01/15(金) 10:50:41
値の交換なんて高々数値1個分のメモリがあればできるのにと思ってたけど、
ROM が数十キロバイトもあるのに RAM が数百バイトなんてマイコンも今時あるんだな。
そら有用だわ。
2010/01/15(金) 12:23:01
xorだと整数型にしか使えないのでは?
2010/01/15(金) 13:43:40
すまん、すでに頭がアセンブラオンリーになってた。w
2010/01/17(日) 13:10:35
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
2010/01/26(火) 17:28:08
>>32
00 01 03 06 10
02 04 07 11
05 08 12
09 13
14
こう並べると条件分岐のない式になる。データの種類によってはこれも便利。
2010/01/26(火) 17:29:25
おっと、式を忘れていた。
z=(x+y)^2/2+(x+y)/2+y
2010/03/24(水) 22:18:35
>>1のコードの意味を教えてくれ。構造体のコピー?
2010/03/24(水) 22:22:22
違う。配列のコピー?よくわからんコードには解説もつけてくれるとありがたい。
2010/03/24(水) 22:36:10
>>40
ゼロターミネイティッドな文字列のコピー
または、偽と可換な番兵付きのコンテナのコピー
2010/03/24(水) 22:38:23
文字列のコピーじゃないかね
文字列の終端には\0があるからそれでループが終わる
K&Rとかに出てきそうな感じ

しかし、>>1って未定義じゃないんだろうか

初級C言語Q&Aの
二つの副作用完了点の間に、オブジェクトの値を2回以上変更している場合、
又は変更した後で新しい値を得ること以外の目的でそのオブジェクトをアク セスしている場合

詳しくないのでわからんけど
2010/03/24(水) 22:56:11
>>43
未定義になるのは、「同一の」オブジェクトの値を二回以上変更した場合な
2010/03/25(木) 18:39:57
把握した。
つまり、このコード自体に意味はないが
while((*src)++ = *dst++)
だったら未定義ということだな
2010/03/25(木) 19:03:38
>>45
把握してない。w
2010/03/25(木) 22:58:42
ここまで何もかも間違っているといっそすがすがしいなw
2010/03/26(金) 05:40:51
>>45
未定義じゃ困るだろ。
右辺値に代入するコードがエラーにならなかったら、みんなC/C++捨てるよ。
2010/03/26(金) 20:10:41
>>48
把握してない。w
50デフォルトの名無しさん
垢版 |
2010/11/11(木) 20:04:19
ほっしゅ
2010/11/11(木) 21:04:20
馬鹿ばっか。w
52デフォルトの名無しさん
垢版 |
2010/11/12(金) 16:16:41
>>1見てわからんとか、Cの初級者以下じゃないか。
ム板ってこんなに程度が低くなってたのか。
2010/11/12(金) 18:37:43
>>2
warosu
2011/11/12(土) 10:42:10.24
>>1
デバックしにくいダメコードだな
2011/11/12(土) 12:51:15.21
まさかの1年
56デフォルトの名無しさん
垢版 |
2011/11/14(月) 21:53:40.55
57デフォルトの名無しさん
垢版 |
2011/11/15(火) 07:26:30.94
だれか>>31教えてください。
58デフォルトの名無しさん
垢版 |
2011/11/15(火) 21:06:15.22
どこかのスレでみたこれ。

/*
ここに処理
//*/

最初の/*を//*にすればどーたらこーたら
2011/11/16(水) 10:56:24.84
#if 0
#endif
なら感動した
2011/11/18(金) 15:19:39.54
>>58
これ確実なの?未定義っぽいけど…。
2011/11/18(金) 20:19:39.09
>>60
確実じゃないの?

場合によるけど。


/*例1
 /*コメントのネストはNG*/
//*/

/*例2
 //このコメントはネストしてもOK
//*/

/*例3
//*//この状態はNG

ようはコンパイラが/*を見つけたら*/がくるまでコメントと見なす機能と//のコメントを上手く使ってるという事で。
62デフォルトの名無しさん
垢版 |
2011/11/19(土) 16:29:55.61
うっ
2012/02/18(土) 01:26:16.96
char main[]={0xC9};

関数=コードというのは分かっていたんだが、ここまでストレートに書けるモノなのかと衝撃を受けた。
2012/02/18(土) 01:58:42.21
何も起きない
2012/10/08(月) 20:24:41.73
/**/
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況