#if 0
以下のようなコードがあったとする
for(i=0;i<100;i++){
/*
コード20行
*/
}
この20行のコードの最後に、変数xによって二分岐させたい部分が1行だけある
この場合、コードの見やすさを優先すべきか、処理効率を優先すべきか
コードの見やすさ優先
for(i=0;i<100;i++){
/* コード19行 */
if (x==0) /* 処理 */
else /* 処理 */
}
処理効率優先
if (x=0){
for(i=0;i<100;i++){
/* コード20行 */
}
}else{
for(i=0;i<100;i++){
/* コード20行 */
}
}
#endif
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10000000
#define M 6
int cnt[N];
int sum = 0;
void func1()
{
sum++;
}
void func2()
{
sum--;
}
clock_t now(void)
{
}
double ms(clock_t t1, clock_t t2)
{
return (t2 - t1) / (double)CLOCKS_PER_SEC;
}
int main(void)
{
void (*func[])(void) = { func1, func2 };
int i, j;
clock_t beg;
for (i = 0; i < N; i++)
cnt[i] = i % 2; // call altenatively
puts("Call 0101010101...."); beg = now();
for (j = 0; j < M; j++)
for (i = 0; i < N; i++)
func[cnt[i]]();
printf("%.3fms\n", ms
(beg
, now
()));
sum = 0;
for (i = 0; i < N; i++)
cnt[i] = (i % 3) ? 1 : 0; // call one in three times
puts("Call 001001001...."); beg = now();
for (j = 0; j < M; j++)
for (i = 0; i < N; i++)
func[cnt[i]]();
printf("%.3fms\n", ms
(beg
, now
()));
sum = 0;
for (i = 0; i < N; i++)
cnt[i] = ((i % 4) == 0 || (i % 4) == 1) ? 1 : 0;
puts("Call 00110011...."); beg = now();
for (j = 0; j < M; j++)
for (i = 0; i < N; i++)
func[cnt[i]]();
printf("%.3fms\n", ms
(beg
, now
()));
sum = 0;
for (i = 0; i < N; i++)
cnt
[i
] = (rand() >> 3) % 2; // call in random
beg = now();
for (j = 0; j < M; j++)
for (i = 0; i < N; i++)
func[cnt[i]]();
printf("%.3fms\n", ms
(beg
, now
()));
return 0;
}
I2lmIDAK5Lul5LiL44Gu44KI44GG44Gq44Kz44O844OJ44GM44GC44Gj44Gf44Go44GZ44KLCgpmb3IoaT0wO2k8MTAwO2krKyl7CuOAgOOAgOOAgC8qCuOAgOOAgOOAgOOAgOOCs+ODvOODiTIw6KGMCuOAgOOAgOOAgCovCn0KCuOBk+OBrjIw6KGM44Gu44Kz44O844OJ44Gu5pyA5b6M44Gr44CB5aSJ5pWweOOBq+OCiOOBo+OBpuS6jOWIhuWykOOBleOBm+OBn+OBhOmDqOWIhuOBjDHooYzjgaDjgZHjgYLjgosK44GT44Gu5aC05ZCI44CB44Kz44O844OJ44Gu6KaL44KE44GZ44GV44KS5YSq5YWI44GZ44G544GN44GL44CB5Yem55CG5Yq5546H44KS5YSq5YWI44GZ44G544GN44GLCgrjgrPjg7zjg4njga7opovjgoTjgZnjgZXlhKrlhYgKZm9yKGk9MDtpPDEwMDtpKyspewrjgIDjgIDjgIAvKiDjgrPjg7zjg4kxOeihjCAqLwrjgIDjgIDjgIBpZiAoeD09MCkgLyog5Yem55CGICovCuOAgOOAgOOAgGVsc2UgLyog5Yem55CGICovCn0KCuWHpueQhuWKueeOh+WEquWFiAppZiAoeD0wKXsK44CA44CA44CAZm9yKGk9MDtpPDEwMDtpKyspewrjgIDjgIDjgIDjgIDjgIDjgIAvKiDjgrPjg7zjg4kyMOihjCAqLwrjgIDjgIDjgIB9Cn1lbHNlewrjgIDjgIDjgIBmb3IoaT0wO2k8MTAwO2krKyl7CuOAgOOAgOOAgOOAgOOAgOOAgC8qIOOCs+ODvOODiTIw6KGMICovCuOAgOOAgOOAgH0KfQojZW5kaWYKCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDx0aW1lLmg+CgojZGVmaW5lIE4gMTAwMDAwMDAKI2RlZmluZSBNIDYKCmludCBjbnRbTl07CmludCBzdW0gPSAwOwoKdm9pZCBmdW5jMSgpCnsKICBzdW0rKzsKfQoKdm9pZCBmdW5jMigpCnsKICBzdW0tLTsKfQoKY2xvY2tfdCBub3codm9pZCkKewogIHJldHVybiBjbG9jaygpOwp9Cgpkb3VibGUgbXMoY2xvY2tfdCB0MSwgY2xvY2tfdCB0MikKewogIHJldHVybiAodDIgLSB0MSkgLyAoZG91YmxlKUNMT0NLU19QRVJfU0VDOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgdm9pZCAoKmZ1bmNbXSkodm9pZCkgPSB7IGZ1bmMxLCBmdW5jMiB9OwogIGludCBpLCBqOwogIGNsb2NrX3QgYmVnOwogIAogIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICBjbnRbaV0gPSBpICUgMjsgLy8gY2FsbCBhbHRlbmF0aXZlbHkKCiAgcHV0cygiQ2FsbCAwMTAxMDEwMTAxLi4uLiIpOwogIGJlZyA9IG5vdygpOwogIGZvciAoaiA9IDA7IGogPCBNOyBqKyspCiAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQogICAgICBmdW5jW2NudFtpXV0oKTsKICBwcmludGYoIiUuM2Ztc1xuIiwgbXMoYmVnLCBub3coKSkpOwoKICBwcmludGYoInN1bSA9ICVkXG4iLCBzdW0pOwogIHN1bSA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICBjbnRbaV0gPSAoaSAlIDMpID8gMSA6IDA7IC8vIGNhbGwgb25lIGluIHRocmVlIHRpbWVzCgogIHB1dHMoIkNhbGwgMDAxMDAxMDAxLi4uLiIpOwogIGJlZyA9IG5vdygpOwogIGZvciAoaiA9IDA7IGogPCBNOyBqKyspCiAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQogICAgICBmdW5jW2NudFtpXV0oKTsKICBwcmludGYoIiUuM2Ztc1xuIiwgbXMoYmVnLCBub3coKSkpOwoKICBwcmludGYoInN1bSA9ICVkXG4iLCBzdW0pOwogIHN1bSA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICBjbnRbaV0gPSAoKGkgJSA0KSA9PSAwIHx8IChpICUgNCkgPT0gMSkgPyAxIDogMDsKCiAgcHV0cygiQ2FsbCAwMDExMDAxMS4uLi4iKTsKICBiZWcgPSBub3coKTsKICBmb3IgKGogPSAwOyBqIDwgTTsgaisrKQogICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKICAgICAgZnVuY1tjbnRbaV1dKCk7CiAgcHJpbnRmKCIlLjNmbXNcbiIsIG1zKGJlZywgbm93KCkpKTsKCiAgcHJpbnRmKCJzdW0gPSAlZFxuIiwgc3VtKTsKICBzdW0gPSAwOwoKICBzcmFuZCh0aW1lKE5VTEwpKTsKICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQogICAgY250W2ldID0gKHJhbmQoKSA+PiAzKSAlIDI7IC8vIGNhbGwgaW4gcmFuZG9tCgogIHB1dHMoIkNhbGwgaW4gUmFuZG9tIik7CiAgYmVnID0gbm93KCk7CiAgZm9yIChqID0gMDsgaiA8IE07IGorKykKICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICAgIGZ1bmNbY250W2ldXSgpOwogIHByaW50ZigiJS4zZm1zXG4iLCBtcyhiZWcsIG5vdygpKSk7CgogIHByaW50Zigic3VtID0gJWRcbiIsIHN1bSk7CgogIHJldHVybiAwOwp9Cg==