ふと気になって
lang:c
if (condition) {
var1 = foo;
var2 = hoge;
} else {
var1 = bar;
var2 = huga;
}
と
lang:c
var1 = bar;
var2 = huga;
if (condition) {
var1 = foo;
var2 = hoge;
}
ってな感じのコードをCで書いていろいろ比べてみた.
手元のgcc 4.0.2(FC4/kernel 2.6.14/Pen4 2.8GHz)で-O2でコンパイルして,”objdump -d”でみると後者のほうが命令数が減って,多少高速化されてるっぽい.
”?:“でもいけるのだけど実際には,前者のと変わらないうえ,条件の評価の結果用の変数が要る(もしくは,条件の評価が複数回起こる)のであまり意味は無い.
検証用に,全ソース.
#####src1.c
lang:c
#include <stdio.h>
int main(int argc, char* argv[])
{
char *arg1, *arg2;
if (argc == 2) {
arg1 = argv[0];
arg2 = argv[1];
} else {
arg1 = argv[1];
arg2 = argv[0];
}
printf("%s,%s\n", arg1, arg2);
return 0;
}
#####src2.c
lang:c
#include <stdio.h>
int main(int argc, char* argv[])
{
char *arg1, *arg2;
arg1 = argv[1];
arg1 = argv[0];
if (argc == 2) {
arg1 = argv[0];
arg2 = argv[1];
}
printf("%s,%s\n", arg1, arg2);
return 0;
}
#####src3.c
lang:c
#include <stdio.h>
int main(int argc, char* argv[])
{
char *arg1, *arg2;
arg1 = (argc == 2) ? argv[0] : argv[1];
arg2 = (argc == 2) ? argv[1] : argv[0];
printf("%s,%s\n", arg1, arg2);
return 0;
}