为了在我的代码中进行文件排序,我使用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
会导致我的代码的其他部分出现许多问题。
为什么两个语句比较比单个语句比较花费更多时间?
答案 0 :(得分:1)
在代码1中,您使用的是&&
运算符。其特点是,如果第一个表达式(LHS)结果为假,它不会评估第二个表达式。这称为短路评估。因此,如果代码1中的第一个表达式为false,则直接转到else
。
此外,嵌套的if语句将生成额外的堆栈帧,这会降低程序的速度(代码2)