1 提升程序效率的方法

2018-06-18 04:07:46来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

1、if语句对出错处理:

    if ( ch >= '0' && ch <= '9' )
     {
     /* 正常处理代码 */
     }
    else
    {
          /* 输出错误信息 */
          printf("error ......\n");
         return ( FALSE );
    }

      这种结构很不好,特别是如果“正常处理代码”很长时,对于这种情况,最好不要用else。先判断错误,如:

        if ( ch < '0' || ch > '9' )
      {
          /* 输出错误信息 */
          printf("error ......\n");
          return ( FALSE );
      }
      /* 正常处理代码 */
      ......

     这样的结构,不是很清楚吗?突出了错误的条件,让别人在使用你的函数的时候,第一眼就能看到不合法的条件,于是就会更下意识的避免。

2避免不必要的函数调用

考虑下面的2个函数:

void str_print( char *str )
{
    int i;

    for ( i = 0; i < strlen ( str ); i++ )
    {
        printf("%c",str[ i ] );
    }
}

void str_print1 ( char *str ) 
{ 
   int len; 
     len = strlen ( str ); 

     for ( i = 0; i < len; i++ )
   { 
         printf("%c",str[ i ] ); 
      } 
}

 注:第1个多次调用函数,明显第2个比较好

3、判断语句中常数写在左侧

  在一个逻辑条件语句中常数项永远在左侧,判断语句的等于条件最好写成这种风格:  if (5 == a) 而不要写成 if (a == 5)

4、循环体内工作量最小化。

  应仔细考虑循环体内的语句是否可以放在循环体之外,使循环体内工作量最小,从而提高程序的时间效率。

  示例:如下代码效率不高。

  for (ind = 0; ind < MAX_ADD_NUMBER; ind++)

  {

    sum += ind;

    back_sum = sum; /* backup sum */

  }

  语句back_sum = sum;”完全可以放在for语句之后,如下。

  for (ind = 0; ind < MAX_ADD_NUMBER; ind++)

  {

       sum += ind;

  }

  back_sum  = sum;  /* backup sum */

5在多重循环中,应将最忙的循环放在最内层,以减少CPU切入循环层的次数。

  如下代码效率不高。

  for (row = 0; row < 100; row++)

  {

    for (col = 0; col < 5; col++)

    {

      sum += a[row][col];

    }

  }

  可以改为如下方式,以提高效率。

  for (col = 0; col < 5; col++)

  {

    for (row = 0; row < 100; row++)

    {

      sum += a[row][col];

    }

  }

6避免循环体内含判断语句。

  应将循环语句置于判断语句的代码块之中。目的是减少判断次数。循环体中的判断语句是否可以移到循环体外,要视程序的具体情况而言,一般情况,与循环变量无关的判断语句可以移到循环体外,而有关的则不可以。

  示例:如下代码效率稍低。

  for (ind = 0; ind < MAX_RECT_NUMBER; ind++)

  {

    if (data_type == RECT_AREA)

    {

      area_sum += rect_area[ind];

        }

    else

        {

      rect_length_sum += rect[ind].length;

      rect_width_sum += rect[ind].width;

    }

  }

  因为判断语句与循环变量无关,故可如下改进,以减少判断次数。

  if (data_type == RECT_AREA)

  {

    for (ind = 0; ind < MAX_RECT_NUMBER; ind++)

    {

      area_sum += rect_area[ind];

    }

  }

  else

  {

    for (ind = 0; ind < MAX_RECT_NUMBER; ind++)

    {

      rect_length_sum += rect[ind].length;

      rect_width_sum  += rect[ind].width;

    }

  }

7、

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:C语言中时间戳转换成时间字符串

下一篇:杭电2002——计算球体积