math_neko 2012-08-17 16:56:04

[C] わけがわからないよ このエントリーをはてなブックマークに追加

投稿者からのアピールポイント

まぁ正しく動くのでウンコードの趣旨とは違うのですが…これは初心者泣かせだよなぁw

void strcpy(char *s, char *t) {
    while(*s++ = *t++) {
        ;
    }
}

使い方ヒント: 「これは臭う」という行を見付けたら、各行のsmellをクリックしてマーキングしておきましょう(要Twitter OAuth認証)

コメント(27)

#1 neunetneucom 2012-08-14 22:59:57  

なるほどねwってヌル文字使えよ!

#2 migimatsu 2012-08-15 01:34:48  

strcpy() を作り直していることはともかく、while 自体は普通の書き方の範疇だと思いますが。もっと冗長に表現できますけれど、これはこれで可読性もあるのでは。

#3 UnivTokyo 2012-08-15 05:44:22  

このwhile文の書き方は無駄がなくて美しいのでは

#4 nut320 2012-08-15 10:14:36  

K&Rには「マスターすべき」って書いてあるんだけどなあ

#5 yuu_hara 2012-08-15 14:49:06  

while()のかっこの中で代入っていうのはどうかと…たしかに見た目は美しいのですが

#7 math_neko 2012-08-15 15:02:55  

> K&Rには「マスターすべき」って書いてあるんだけど

そこなんですよ。天下の K&R がお勧めしてるから怖い。strcpy を作り直してること自体は置いておくとしても、そういうのをお勧めしちゃうのは初学者に対してはいかがなものなのかと思いました。

#8 HarpoonArrow 2012-08-16 15:33:03  

今でもCが好きな人はこういう記述こそ美しいと感じるんじゃないですかね?とかいってみるてすと。私は好きです

#9 math_neko 2012-08-17 16:57:00  

C らしいと言えば C らしい書き方ではあります。しかし素人にはお勧めできない。

#10 mikecat_mixc 2012-08-18 00:06:38  

while(*s++ = *t++);でいいじゃん!

#11 melponn 2012-08-18 05:57:00  

strcpy を再実装してる割には t が const char* じゃないし、戻り値が void だし、まさしくウンコード。

#14 func_hs 2012-08-18 10:47:33  

while((*s++=*t++) == '\0')?

#15 DigitalMisaka 2012-08-21 04:29:31  

むしろうんコードではなく美しいコード

#16 math_neko 2012-08-21 05:32:04  

やっぱりガチ C 勢的には良いコードなんだろうなー。Java に慣れ切ってしまった私にはついていけない世界になってしまった orz

#18 math_neko 2012-08-22 05:01:25  

> 美食家コード

確かに、いかにも通が好みそうな書き方ですよね。

#19 mizuho_at_mate 2012-08-23 09:37:33  

無駄のない無駄に美しいコード!!

#20 pocky14 2012-09-04 11:10:25  

s と t という変数名の使い方が逆だと思った。

#21 math_neko 2012-09-05 01:57:22  

あ、ちなみにこのコード、実装済みの strcpy と全く同じ動きです。第一引数は文字列の格納先、第二引数にコピーしたい文字列です。

#23 ATRATITH 2012-09-13 02:37:11  

Cにご無沙汰していると,(*s)++=(*t)++なのか*(s++)=*(t++)なのか,ぱっと思い出せないあたりがウンコードなのでは,と思った.

#24 tot_main 2012-09-20 14:40:49  

K&Rで見たなーと思ったら既に書いてあった。

#25 ikb 2012-09-27 06:57:01  

バッファオーバーランするから! (strcpy も同じで)

#26 kaicohen 2012-10-13 04:39:08  

今時のコンピュータの性能から言えば、ここまでしても大して高速になるわけでもないしな。

#27 DsYochibe 2012-10-14 12:37:56  

どうせコンパイラが最適化してくれるんだから、可読性の高いコードを書くほうが大事だと思うの。 でも収まり悪く感じて弄ってるうちにこんなコードになることはよくある。

コメント投稿には、twitter認証が必要です。

Twitter認証

このウンコードに臭った人は、こちらのウンコードにも臭ってます

[C] NULL と 8 の何故

このエントリーをはてなブックマークに追加

テストは通ってるけど、教科書からやり直し...

#define TO_STRING(n, str) \
  if(n != N...

鑑賞する »

[C] switch-caseは現場の臭いがする

このエントリーをはてなブックマークに追加

"とりあえず"で書いた 2010 年 4...

// switch-case にしたいが、関数で値を取得しないといけないため、
...

鑑賞する »

[C] すげーちゃんと動く!

このエントリーをはてなブックマークに追加

結合試験2日前に脱退したうんkプログラマ...

return 0;

鑑賞する »