免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: moonwhite999
打印 上一主题 下一主题

两道嵌入式面试题 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2010-03-22 14:49 |只看该作者
回复 39# 专操五毛


    您的编程风格很规范,膜拜!

论坛徽章:
0
42 [报告]
发表于 2010-03-22 15:53 |只看该作者
实在过奖了。
匆匆写就,不规范的有好几处,自己review了下。
1. 函数申明没用const
2. 副作用++用的太滥
3. 分支语句没用{和}包起来
4. 最重要的的是,函数中用了多次return(这非常不好)

一句话,写代码时态度不好。

论坛徽章:
0
43 [报告]
发表于 2010-03-22 16:10 |只看该作者
回复 42# 专操五毛


    呵呵,再次学习!

论坛徽章:
0
44 [报告]
发表于 2010-03-22 16:13 |只看该作者
回复 39# 专操五毛

表驱动的一个简单例子,赞一下代码的简练!

论坛徽章:
0
45 [报告]
发表于 2010-03-22 16:45 |只看该作者
也来献丑一下,适合所有字符的版本
int main( int argc, char **argv )
{
                unsigned char a[255], min_c, found=0;
        int i, len, t, p, min;
        min = len = strlen(argv[1]);
        memset( a, 0, 255 );
        for( i=0; i<len; i++ )
        {
                if( !a[argv[1][i]] )
                        a[argv[1][i]] = 1 + (i+1)*10;
                else
                        a[argv[1][i]] = 2 + (i+1)*10;
        }
        for( i=0; i<255; i++ )
        {
                t = a[i]/10;
                p = a[i]%10;
                if( p == 1 )
                {
                        if( t<min )
                        {
                                min = t;
                                min_c = i;
                                found = 1;
                        }
                }
        }
                       
        if( found )
                printf( "%c: %d\n", min_c, min );
        else
                printf( "Not found!\n" );
}

论坛徽章:
0
46 [报告]
发表于 2010-03-22 17:46 |只看该作者
实在过奖了。
匆匆写就,不规范的有好几处,自己review了下。
1. 函数申明没用const
2. 副作用++用的太滥 ...
专操五毛 发表于 2010-03-22 15:53



    估计他是华三的。。。

    这样效率高吗? 难看死了,看不懂。  不过还是学习

论坛徽章:
0
47 [报告]
发表于 2010-03-22 19:26 |只看该作者
回复 42# 专操五毛


    请问,为什么多次返回return不好?怎样返回好呢?

论坛徽章:
0
48 [报告]
发表于 2010-03-22 19:42 |只看该作者
回复 47# pengjianbokobe


    因为如果在函数体中申请了资源,多处return可能造成资源泄露。所以很多编程规范都强调在函数末尾用返回值返回。比如可以用break或goto到达函数尾。

代码改了改,这样做code review时候应该会好不少

  1. #include <limits.h>

  2. const char* find_first_once(const char* s)
  3. {
  4.         int map[UCHAR_MAX] = {0};
  5.         const char *ptr = s;
  6.         while (*ptr)
  7.         {
  8.                 map[*ptr]++;
  9.                 ptr++;
  10.         }

  11.         ptr = NULL;
  12.         while (*s)
  13.         {
  14.                 if (1 == map[*s])
  15.                 {
  16.                         ptr = s;
  17.                         break;
  18.                 }
  19.                 else
  20.                 {
  21.                         s++;
  22.                 }
  23.         }
  24.         return ptr;
  25. }

  26. int main(int argc, char* argv[])
  27. {
  28.         const char *s = "abcdabce";
  29.         const char *p = find_first_once(s);
  30.         if (p)
  31.         {
  32.                 printf("%c:%d\n", *p, p-s);
  33.         }
  34.         else
  35.         {
  36.                 printf("none!\n");
  37.         }
  38.         return 0;
  39. }
复制代码

论坛徽章:
0
49 [报告]
发表于 2010-03-23 11:09 |只看该作者
效率了

论坛徽章:
0
50 [报告]
发表于 2010-03-23 11:11 |只看该作者
我是从局部性来看待这个问题的。第二个程序的空间局部性比第一个好,所以效率高一些。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP