两个语句中的strncmp比单个语句花费的时间更多

时间:2015-01-21 08:03:23

标签: c linux strncmp

为了在我的代码中进行文件排序,我使用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 个答案:

答案 0 :(得分:1)

在代码1中,您使用的是&&运算符。其特点是,如果第一个表达式(LHS)结果为假,它不会评估第二个表达式。这称为短路评估。因此,如果代码1中的第一个表达式为false,则直接转到else

此外,嵌套的if语句将生成额外的堆栈帧,这会降低程序的速度(代码2)