0

为了在我的代码中进行文件排序,我用于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在其上运行会导致我的代码的其他部分出现许多问题。

为什么两个语句比较比单个语句比较花费更多时间?

4

1 回答 1

1

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

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

于 2015-01-21T08:10:43.507 回答