免费注册 查看新帖 |

Chinaunix

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

你们觉得编码规范化真的不重要么? [复制链接]

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
31 [报告]
发表于 2012-03-30 23:02 |只看该作者
回复 4# OwnWaterloo

好吧,被蹭到笑点了,幸好牛奶喝完了!


   

论坛徽章:
0
32 [报告]
发表于 2012-03-30 23:58 |只看该作者
//你说他考虑不全,他说代码要简短,能跑就行
  能跑说明什么? 说明这段代码正确,
  正确+简短,就是优秀

//你说不应该用魔鬼数字,他说代码要写的直观
   char a[50]?
   你觉得这个 50 魔幻在哪里?
   傻子都看的出来 50是个数组长度
   #define a_length 50
   char a[a_length ];
    这样真的容易阅读吗?


//你说变量要初始化,他说这是多余
   变量值在使用之前只需要赋值一次,
   干吗要多余的初始化呢?
    int i = 0;
    for (i = 0; i < 8; i++)
   {}

    初始化不蛋疼?
   
//你说不要写一些晦涩难懂的代码,他说这样证明自己NB
其实,我觉得你的代码就够晦涩的了,

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
33 [报告]
发表于 2012-03-31 00:06 |只看该作者
三月廿七 发表于 2012-03-30 23:58
//你说不应该用魔鬼数字,他说代码要写的直观
   char a[50]?
   你觉得这个 50 魔幻在哪里?
   傻子都看的出来 50是个数组长度


傻子能看出來為什麼是 50 而不是 25 或 26 麼?

论坛徽章:
0
34 [报告]
发表于 2012-03-31 00:11 |只看该作者
本帖最后由 三月廿七 于 2012-03-31 00:34 编辑

回复 34# MMMIX

这东西只能靠注释,靠宏没有用, 宏在多数情况下都是个蛋疼的玩意
尤其是 函数内的 switch/case 以及 数组常量

xpm2bmp()
{
    char word[10];
    static int n = 0;
      
      //
      n++;

     switch()
    {
     case 1: // width
         break;
     case 2: // height;
         break;
      case 3:// length;
         break;
      case 4:// per_character
         break;
    }
}

我写注释都感觉比宏看的舒服,
没有人会傻到给 多维数组的每个数字定义一个宏吧?

论坛徽章:
0
35 [报告]
发表于 2012-03-31 03:26 |只看该作者
本帖最后由 gtkmm 于 2012-03-31 03:27 编辑
三月廿七 发表于 2012-03-31 00:11
回复 34# MMMIX

这东西只能靠注释,靠宏没有用, 宏在多数情况下都是个蛋疼的玩意


我喜欢定义喜欢BT的宏,让人搞不明白有什么用。

比如这个:

原来有么一个函数:
for(int i = 0; i < N; ++i) {
     vector x;
     load_vector(x);            // 从硬盘上读一段数据
     process(x);                  // 处理这段数据
     write_vector(x);           // 处理结果写回
}

循环读一个文件,每次读一行,进行处理, 再写到另一个文件里去。 这是可以并行的, 也就是计算第N行时, 是可以读第N+1行的。



我会写个这样的东西(先在某个地方,开启全局异步):
(当然,这些函数是我自己写的,所以能开全局异步)

load_vector(0);                                     // 先读一行

FOR(int i = 0; i < N; ++i) {
     vector x;
      
     process(x);                                       // 1. 处理这段数据
     if (i+1<N)
          GOTO(1)   load_vector(x);            //  2. GOTO(1), 意思是暂时跳到下一个线程去执行一条语句 (硬盘上读下一段数据)
     write_vector(x);                                // 3 . 处理结果写回
}

现在处理流程会变为:
1--->  (2, 3)  ---> ... 1 -->(2, 3) -->  ..
因为1, 3是在一个线程里,所以会顺序执行。
2不和1,3,在一个线程里,会异步执行, 并会和下一次的循环同步上。


GOTO(x)  意思是暂时跳到下面X个线程去启动一个函数。  (X可以是负数,即回跳)
WAIT(x)   意思是等待下面X个线程执行结束, 比如WAIT(-1)是等待上一个。


论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
36 [报告]
发表于 2012-03-31 12:20 |只看该作者
三月廿七 发表于 2012-03-31 00:11
回复 34# MMMIX

这东西只能靠注释,靠宏没有用, 宏在多数情况下都是个蛋疼的玩意


那你是不是准备在所有用到 50 的地方都给个注释?要是后面要把 50 改为 25 呢?某个数字,如果只用一次,当然可以通过注释说明,而不必非定义个宏,但要在要多次使用的情况下,宏或其他类似手段都是必须的。

另外,注释还有个问题就是如何保证它和代码保持一致。

论坛徽章:
0
37 [报告]
发表于 2012-03-31 12:52 |只看该作者
教条主义害死人,使用数字和宏,要看场合的。

很多长度之类,直接数字还是有必要的。比如局部的字符串转换,

char str[50];
sprintf(str, "msg = %d", i);

绝对要用数字,不要用宏。
用宏的话,因为信息不是集中在一起,容易修改一处,坏了另一处。顾此失彼。

论坛徽章:
0
38 [报告]
发表于 2012-03-31 13:14 |只看该作者
zylthinking 发表于 2012-03-30 22:51
好奇怎么比memset效率高了

个人感觉一个实现是由编译器负责初始化,一个是通过函数调用搞定的,编译器初始化效率>函数调用。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
39 [报告]
发表于 2012-03-31 14:33 |只看该作者
jallyx 发表于 2012-03-31 13:14
个人感觉一个实现是由编译器负责初始化,一个是通过函数调用搞定的,编译器初始化效率>函数调用。



(gdb) si
0x00001ec1        14            char buf[1024] = {0};
(gdb) disassemble
Dump of assembler code for function test2:
0x00001ea0 <test2+0>:        push   %ebp
0x00001ea1 <test2+1>:        mov    %esp,%ebp
0x00001ea3 <test2+3>:        push   %esi
0x00001ea4 <test2+4>:        sub    $0x414,%esp
0x00001eaa <test2+10>:        call   0x1eaf <test2+15>
0x00001eaf <test2+15>:        pop    %eax
0x00001eb0 <test2+16>:        mov    0x16d(%eax),%ecx
0x00001eb6 <test2+22>:        mov    (%ecx),%ecx
0x00001eb8 <test2+24>:        mov    %ecx,-0x8(%ebp)
0x00001ebb <test2+27>:        lea    -0x408(%ebp),%ecx
0x00001ec1 <test2+33>:        mov    %ecx,%edx
0x00001ec3 <test2+35>:        mov    %esp,%esi
0x00001ec5 <test2+37>:        mov    %edx,(%esi)
0x00001ec7 <test2+39>:        movl   $0x400,0x4(%esi)
0x00001ece <test2+46>:        mov    %eax,-0x40c(%ebp)
0x00001ed4 <test2+52>:        mov    %ecx,-0x410(%ebp)
0x00001eda <test2+58>:        call   0x1f52 <dyld_stub___bzero>


论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
40 [报告]
发表于 2012-03-31 14:38 |只看该作者
zylthinking 发表于 2012-03-31 14:33
(gdb) si
0x00001ec1        14            char buf[1024] = {0};
(gdb) disassemble


被初始化的变量size小的时候,如一个小的结构,可能会被优化成几条mov指令
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP