为了在代码中进行文件排序,我使用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 2Code 1花费的时间要多。我使用的是一个跨平台设备,在它上运行Code 2会导致代码的其他部分出现许多问题。
为什么两个语句的比较要比一个语句的比较花费更多的时间?

最佳答案

在代码1中,您使用的是&&运算符。其特点是,如果第一个表达式(LHS)结果为false,则它不会计算第二个表达式。这称为短路评估。因此,如果代码1中的第一个表达式为false,它将直接转到else
另外,嵌套的if语句将生成额外的堆栈帧,这将减慢程序的速度(代码2)

10-04 13:47
查看更多