なんか外から与える場合
http://d.hatena.ne.jp/shinichiro_h/20120410#1333988045 状態使う系関数で他にピンとくるのは,人間がカジュアルに現在時刻を知ろうとするのと同じ感じでプログラムも知りたい筈で
/* gen.c */ #include <time.h> #include <stdio.h> char str[123456]; int main() { sprintf(str,"gcc time.c -DSTART=%d -o b.out && $(pwd)/b.out",time(NULL)); printf("%s\n",str); system(str); return 0; }
/* time.c */ #include <time.h> #include <stdio.h> const int N = 5; int f() { sleep(1); if(time(NULL) - START == N){ printf("%d ",time(NULL) - START); return N; } else{ printf("%d +\n",time(NULL) - START); return (time(NULL) - START) + f(); } } int main() { printf("= %d\n",f()); }
みたいな愚かなプログラムを2つ書いて
/Users/ranha/c_misc/souwa% gcc gen.c start.c: In function ‘main’: start.c:8: warning: format ‘%d’ expects type ‘int’, but argument 5 has type ‘time_t’ /Users/ranha/c_misc/souwa% ./a.out gcc time.c -DSTART=1334000645 -o b.out && $(pwd)/b.out time.c: In function ‘f’: time.c:10: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘time_t’ time.c:10: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘time_t’ time.c:14: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘time_t’ time.c:14: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘time_t’ 2 + 3 + 4 + 5 = 14
みたいなのは結構な確率で失敗するのでアレ これもなんというか,すごい便利generatorの1種の筈で
sleep sortを思い出して止まないですね