为了在代码中进行文件排序,我使用strncmp
来比较每个字符串的第一个元素。
包括我的代码:
代码1:
for (i = 1; i < file_cnt; )
{
if ((strncmp(info[i-1].name, "1", 1) == 0) &&
(strncmp(info[i].name, "2", 1) == 0))
{
to do....
i += 2;
}
else if ((strncmp(info[i-1].name, "2", 1) == 0) &&
(strncmp(info[i].name, "1", 1) == 0))
{
to do....
i += 2;
}
...
}
代码2:
for (i = 1; i < file_cnt; )
{
if (strncmp(info[i-1].name, "1", 1) == 0)
{
if (strncmp(info[i].name, "2", 1) == 0)
{
to do....
i += 2;
}
}
else if (strncmp(info[i-1].name, "2", 1) == 0)
{
if (strncmp(info[i].name, "1", 1) == 0)
{
to do....
i += 2;
}
}
...
}
在这里,
Code 2
比Code 1
花费的时间要多。我使用的是一个跨平台设备,在它上运行Code 2
会导致代码的其他部分出现许多问题。为什么两个语句的比较要比一个语句的比较花费更多的时间?
最佳答案
在代码1中,您使用的是&&
运算符。其特点是,如果第一个表达式(LHS)结果为false,则它不会计算第二个表达式。这称为短路评估。因此,如果代码1中的第一个表达式为false,它将直接转到else
。
另外,嵌套的if语句将生成额外的堆栈帧,这将减慢程序的速度(代码2)