234: 2008/05/23(金) 03:57:52.38 ID:sM2jNusj0 (3)
ねぇねぇ、こんなのどう思いますか?
#define DEBUGMODE
#ifdef DEBUGMODE
#define DBG if(1)
#else
#define DBG if(0)
#endif
void main(){
DBG printf("デバッグモードの時だけ表示される情報だよ\n");
}
#define DEBUGMODE の行をコメントアウトしてコンパイルしたら、
最適化されてDBGの行は消してからコンパイルされるよね?
#ifdef DEBUGMODE
printf("デバッグモードの時だけ表示される情報だよ\n");
#endif
よりも見やすいと思うんだけど・・・。
269: 2008/05/23(金) 21:40:42.30 ID:cRvPjj4q0
gcc (GCC) 4.1.3なら-O0、オプション無しですら消される
これの味噌は、デバッグprint以外にもDBG exit(1);とかDBG i++;とかができる点にあります。
249: 2008/05/23(金) 18:16:39.06 ID:uN5A9fC70 (4)
しかし、
DBG {
hoge_dbg();
}
else {
hoge();
}
これはキモいな
http://ex25.2ch.net/test/read.cgi/news4vip/1211348705/234,269,249
以前スレッドに張られた7行UNIXシェルを短くしてみた。 気になった点をちょちょいと、
ただ短くしただけだけなのでまだまだ改良の余地はあると思う。
これでパイプとかリダイレクトとか実装できるかもね
extern struct _IO_FILE *stdin;extern char**environ;main(int c,char**a){char*V[
9],B[99],**A,*C,i;for(environ=a+1;printf(">")&&fgets(B,99,stdin);){*strchr(B,
10)=0;for(*(A=V)=C=B;C=strchr(C,32);*++A=C)*C++=0;*++A=0;if(!strcmp(*V,"exit")
)exit(0);if(strcmp(*V,"cd")||chdir(V[1])){switch(fork()){case 0:execvp(*V,V);
case-1:puts("err");exit(0);}wait(0);}}}
./ish PATH=/usr/bin TZ=-9 てな感じで環境変数とか設定とか云々カンヌん。
しかしなぜishなのか? BASE64みたいなアレと関係あるのかなぁ
Code Golfに関するブログを読んでたら、
> for を main()に…
なんて記述があったのでパクってみた。
mainの中身全体をくくるforの代わりに、mainを再帰することでループを実現する。
で、できたコードがこれ。
ちなみに問題はこれ → http://golf.shinh.org/p.rb?Smileys+Triangle
j;
main(i){
for(j=0;j<i;j++)
printf(j<3?":\0-\0)"+j*2:"))");
puts("")&&i<34&&main(i+1),exit(1);
}
ちぢまらねぇーーーーーーーーー
iが34までいったところで終了せにゃならんから、どうしても i<34 と exit(1) は外せない(と思う)んだけど、
それだけですでに for(;i<34;) と同じだけ文字数がかかる罠。
iをグローバルにして main の引数をなくしてもほとんど縮まらず。まず main が4文字もあるし。
さらになにをやってるのかくそ分かりにくい。最後の一行なんかまさにカオス。
明日見たらもう分からんなこれ。
http://golf.shinh.org/
面白そうなのでやってみた。ハマる。
http://golf.shinh.org/p.rb?Smileys+Triangle
んで、↑の問題がCでどんなにがんばっても79バイトより短くなる気がしない。
i;
main(j){
for(;i++<34;puts(""))
for(j=0;j<i;j++)
printf(j<3?":\0-\0)"+j*2:"))");
}
これでスペースと改行を削って79バイト。
一位の人は63バイトなんだけど無理だろ。
system(“perl …”) とかしてるんだろうか・・・
systemとかexecとか使わずにもっと縮むよ!って人がいたら教えてくれ。
アーキテクチャ依存(スタックの構造を仮定したり)はギリギリ許す。
(けどこの問題はそれで縮む気があまりしない・・・ やり方を変えてforを一個減らすしかないか?)